Skip to main content
Glama
raidenrock

USCardForum MCP Server

by raidenrock

USCardForum MCP Server

A production-ready Model Context Protocol (MCP) server for interacting with USCardForum, a Discourse-based community focused on US credit cards, points, miles, and financial optimization.

Features

  • 22 Tools organized into 4 logical groups:

    • šŸ“° Discovery (5) — Find topics via hot/new/top/search/categories

    • šŸ“– Reading (3) — Access topic content with pagination

    • šŸ‘¤ Users (9) — Profile research, badges, activity, social

    • šŸ” Auth (5) — Login, notifications, bookmarks, subscriptions

  • 4 Prompts for guided research workflows (Chinese)

  • 3 Resources for quick data access

  • Multiple Transports — stdio, SSE, Streamable HTTP

  • Strongly Typed with Pydantic domain models

  • Rate Limiting with exponential backoff

  • Cloudflare Bypass via cloudscraper

  • Heroku Ready deployment configuration

Related MCP server: USCardForum MCP Server

Project Structure

uscardforum/
ā”œā”€ā”€ src/uscardforum/
│   ā”œā”€ā”€ __init__.py          # Package exports
│   ā”œā”€ā”€ client.py            # Main client (composes APIs)
│   ā”œā”€ā”€ server.py            # FastMCP server (MCP layer)
│   ā”œā”€ā”€ server_core.py       # Server configuration
│   ā”œā”€ā”€ models/              # Domain models (Pydantic)
│   │   ā”œā”€ā”€ topics.py        # Topic, Post, TopicInfo, TopicSummary
│   │   ā”œā”€ā”€ users.py         # UserSummary, UserAction, Badge, etc.
│   │   ā”œā”€ā”€ search.py        # SearchResult, SearchPost, SearchTopic
│   │   ā”œā”€ā”€ categories.py    # Category, CategoryMap
│   │   └── auth.py          # Session, Notification, Bookmark, etc.
│   ā”œā”€ā”€ api/                 # API modules (backend)
│   │   ā”œā”€ā”€ base.py          # Base API with HTTP methods
│   │   ā”œā”€ā”€ topics.py        # Topic operations
│   │   ā”œā”€ā”€ users.py         # User profile operations
│   │   ā”œā”€ā”€ search.py        # Search operations
│   │   └── auth.py          # Authentication operations
│   ā”œā”€ā”€ server_tools/        # MCP tool definitions
│   └── utils/               # HTTP and Cloudflare utilities
ā”œā”€ā”€ tests/                   # Integration tests
ā”œā”€ā”€ .github/workflows/       # CI/CD workflows
│   ā”œā”€ā”€ ci.yml               # Tests, linting, type checking
│   └── deploy.yml           # Multi-platform deployment
ā”œā”€ā”€ Dockerfile               # Container build
ā”œā”€ā”€ docker-compose.yml       # Local development
ā”œā”€ā”€ fly.toml                 # Fly.io configuration
ā”œā”€ā”€ railway.toml             # Railway configuration
ā”œā”€ā”€ render.yaml              # Render blueprint
ā”œā”€ā”€ koyeb.yaml               # Koyeb configuration
ā”œā”€ā”€ digitalocean-app.yaml    # DigitalOcean App Platform
ā”œā”€ā”€ cloudbuild.yaml          # Google Cloud Build
ā”œā”€ā”€ heroku.yml               # Heroku manifest
ā”œā”€ā”€ app.json                 # Heroku button config
ā”œā”€ā”€ Procfile                 # Heroku process
└── pyproject.toml           # Python package config

Installation

# Clone the repository
git clone https://github.com/uscardforum/mcp-server.git
cd uscardforum

# Install with UV
uv sync

# Run the server
uv run uscardforum

Using pip

# Clone the repository
git clone https://github.com/uscardforum/mcp-server.git
cd uscardforum

# Create virtual environment
python -m venv .venv
source .venv/bin/activate  # or .venv\Scripts\activate on Windows

# Install
pip install -e .

# Run
uscardforum

Configuration

Environment Variables

Variable

Default

Description

MCP_TRANSPORT

stdio

Transport mode: stdio, sse, or streamable-http

MCP_HOST

0.0.0.0

HTTP server host (for sse/streamable-http)

MCP_PORT

8000

HTTP server port (for sse/streamable-http)

NITAN_TOKEN

(none)

Bearer token for MCP auth (streamable-http only)

USCARDFORUM_URL

https://www.uscardforum.com

Forum base URL

USCARDFORUM_TIMEOUT

15.0

Request timeout in seconds

NITAN_USERNAME

(none)

Forum username for auto-login (optional)

NITAN_PASSWORD

(none)

Forum password for auto-login (optional)

NITAN_API_KEY

(none)

Discourse User API Key (optional, alternative auth)

NITAN_API_CLIENT_ID

(none)

Discourse API Client ID (optional, alternative auth)

Transport Modes

The server supports three transport modes:

  • stdio (default): Standard input/output, used by Cursor and Claude Desktop

  • sse: Server-Sent Events over HTTP

  • streamable-http: Streamable HTTP transport (recommended for web deployments)

Running with Streamable HTTP

# Start server with streamable HTTP transport
MCP_TRANSPORT=streamable-http MCP_PORT=8000 uv run uscardforum

# The MCP endpoint will be available at:
# http://localhost:8000/mcp

Streamable HTTP Authentication

When using streamable-http transport, you can require clients to authenticate with a bearer token by setting NITAN_TOKEN:

# Start server with authentication required
MCP_TRANSPORT=streamable-http NITAN_TOKEN=my-secret-token uv run uscardforum

# Clients must include Authorization header:
# Authorization: Bearer my-secret-token

This is useful for securing public deployments. The token is only enforced for streamable-http transport; stdio and sse modes do not use this authentication.

Forum Authentication

The server supports two authentication methods for accessing authenticated features (notifications, bookmarks, subscriptions):

Method 1: Username/Password Login (Priority)

If both NITAN_USERNAME and NITAN_PASSWORD are set, the server automatically logs into the forum on startup using username/password authentication.

Method 2: User API Key

Alternatively, you can use a Discourse User API Key for authentication. This method is used only when NITAN_USERNAME and NITAN_PASSWORD are not provided.

Environment Variables:

  • NITAN_API_KEY: Your Discourse User API Key

  • NITAN_API_CLIENT_ID: Your Discourse API Client ID

How to obtain a User API Key: See https://github.com/discourse/discourse-mcp?tab=readme-ov-file#obtaining-a-user-api-key

Usage Example:

# Using User API Key (when username/password are not set)
export NITAN_API_KEY="your_api_key_here"
export NITAN_API_CLIENT_ID="your_client_id_here"
uv run uscardforum

Authentication Priority:

  • If NITAN_USERNAME and NITAN_PASSWORD are set → Username/Password login is used

  • If only NITAN_API_KEY and NITAN_API_CLIENT_ID are set → User API Key authentication is used

  • If neither is set → Server runs in unauthenticated mode (limited features)

Cursor IDE Integration

Add to ~/.cursor/mcp.json:

Option 1: Username/Password Authentication

{
  "mcpServers": {
    "uscardforum": {
      "command": "uv",
      "args": ["--directory", "/path/to/uscardforum", "run", "uscardforum"],
      "env": {
        "NITAN_USERNAME": "your_forum_username",
        "NITAN_PASSWORD": "your_forum_password"
      }
    }
  }
}

Option 2: User API Key Authentication

{
  "mcpServers": {
    "uscardforum": {
      "command": "uv",
      "args": ["--directory", "/path/to/uscardforum", "run", "uscardforum"],
      "env": {
        "NITAN_API_KEY": "your_api_key",
        "NITAN_API_CLIENT_ID": "your_client_id"
      }
    }
  }
}

Claude Desktop Integration

Add to Claude Desktop's config file:

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

Option 1: Username/Password Authentication

{
  "mcpServers": {
    "uscardforum": {
      "command": "uv",
      "args": ["--directory", "/path/to/uscardforum", "run", "uscardforum"],
      "env": {
        "NITAN_USERNAME": "your_forum_username",
        "NITAN_PASSWORD": "your_forum_password"
      }
    }
  }
}

Option 2: User API Key Authentication

{
  "mcpServers": {
    "uscardforum": {
      "command": "uv",
      "args": ["--directory", "/path/to/uscardforum", "run", "uscardforum"],
      "env": {
        "NITAN_API_KEY": "your_api_key",
        "NITAN_API_CLIENT_ID": "your_client_id"
      }
    }
  }
}

Deployment

The USCardForum MCP Server supports multiple deployment platforms. Choose the one that best fits your needs.

Quick Comparison

Platform

Starting Price

Pros

Best For

Heroku

$7/mo

Easy, one-click deploy

Quick start

Railway

$5/mo

Simple, GitHub integration

Developers

Render

$7/mo

Auto-scaling, free tier

Production

Fly.io

$0-5/mo

Edge deployment, generous free tier

Global reach

Google Cloud Run

Pay-per-use

Auto-scaling to zero

Variable traffic

DigitalOcean

$5/mo

Predictable pricing

Self-managed

Koyeb

$5/mo

Fast deploys, global edge

Low latency

Cloudflare

Free

Global edge network

Edge deployment

Docker

Self-hosted

Full control

Privacy-conscious


Heroku

Deploy

# Manual deployment
heroku login
heroku create your-app-name

# Set environment variables
heroku config:set NITAN_TOKEN=$(openssl rand -hex 32)
heroku config:set NITAN_USERNAME=your_username
heroku config:set NITAN_PASSWORD=your_password

# Deploy
git push heroku main
heroku ps:scale web=1

Railway

Deploy on Railway

# Install Railway CLI
npm i -g @railway/cli

# Login and deploy
railway login
railway init
railway up

# Set environment variables
railway variables set MCP_TRANSPORT=streamable-http
railway variables set NITAN_TOKEN=$(openssl rand -hex 32)
railway variables set NITAN_USERNAME=your_username
railway variables set NITAN_PASSWORD=your_password

# Open dashboard
railway open

Render

Deploy to Render

  1. Connect your GitHub repository to Render

  2. Create a new Web Service

  3. Select Docker as the runtime

  4. Set environment variables in the dashboard:

    • MCP_TRANSPORT=streamable-http

    • NITAN_TOKEN=your-secret-token

    • NITAN_USERNAME=your-username (optional)

    • NITAN_PASSWORD=your-password (optional)

Or use the blueprint file:

# render.yaml is included in the repository
# Just connect your repo and Render will auto-detect it

Fly.io

# Install Fly CLI
curl -L https://fly.io/install.sh | sh

# Login and launch
fly auth login
fly launch --name uscardforum-mcp

# Set secrets
fly secrets set NITAN_TOKEN=$(openssl rand -hex 32)
fly secrets set NITAN_USERNAME=your_username
fly secrets set NITAN_PASSWORD=your_password

# Deploy
fly deploy

# Check status
fly status
fly logs

Google Cloud Run

Open in Cloud Shell

After clicking, run in Cloud Shell:

# Deploy to Cloud Run
gcloud run deploy uscardforum-mcp \
  --source . \
  --region us-west1 \
  --platform managed \
  --allow-unauthenticated \
  --port 8000 \
  --memory 512Mi \
  --set-env-vars "MCP_TRANSPORT=streamable-http,MCP_HOST=0.0.0.0,MCP_PORT=8000"

Or deploy via CLI:

# Enable required APIs
gcloud services enable run.googleapis.com cloudbuild.googleapis.com

# Deploy directly from source
gcloud run deploy uscardforum-mcp \
  --source . \
  --region us-west1 \
  --platform managed \
  --allow-unauthenticated \
  --port 8000 \
  --memory 512Mi \
  --set-env-vars "MCP_TRANSPORT=streamable-http,MCP_HOST=0.0.0.0,MCP_PORT=8000"

# Set secrets (create them first in Secret Manager)
gcloud run services update uscardforum-mcp \
  --set-secrets="NITAN_TOKEN=nitan-token:latest"

Or use Cloud Build with the included cloudbuild.yaml:

gcloud builds submit --config cloudbuild.yaml

DigitalOcean App Platform

# Install doctl CLI
brew install doctl  # or: snap install doctl

# Authenticate
doctl auth init

# Create app from spec
doctl apps create --spec digitalocean-app.yaml

# Or deploy via dashboard:
# 1. Go to https://cloud.digitalocean.com/apps
# 2. Create App → GitHub → Select repository
# 3. Configure environment variables

Koyeb

# Install Koyeb CLI
curl -fsSL https://raw.githubusercontent.com/koyeb/koyeb-cli/master/install.sh | sh

# Login and deploy
koyeb login
koyeb app create uscardforum-mcp \
  --docker-image ghcr.io/uscardforum/mcp-server:latest \
  --ports 8000:http \
  --env MCP_TRANSPORT=streamable-http \
  --env MCP_PORT=8000

# Set secrets
koyeb secrets create nitan-token --value your-secret-token
koyeb app update uscardforum-mcp --env NITAN_TOKEN=@nitan-token

Cloudflare Containers

Deploy to Cloudflare


Docker (Self-Hosted)

# Pull from Docker Hub (recommended)
docker pull uscarddev/uscardforum-mcp:latest

# Run the container
docker run -d \
  -p 8000:8000 \
  -e MCP_TRANSPORT=streamable-http \
  -e NITAN_TOKEN=your-secret-token \
  --name uscardforum-mcp \
  uscarddev/uscardforum-mcp:latest

# Or build locally
docker build -t uscardforum-mcp .
docker run -d \
  -p 8000:8000 \
  -e MCP_TRANSPORT=streamable-http \
  -e NITAN_TOKEN=your-secret-token \
  --name uscardforum-mcp \
  uscardforum-mcp

# Or use Docker Compose
docker compose up -d

# View logs
docker compose logs -f

Docker Hub: uscarddev/uscardforum-mcp

Available tags:

  • latest - Latest stable release

  • tagname - Specific version tags

For production with HTTPS, use a reverse proxy like Traefik or nginx. See docker-compose.yml for Traefik example.


Environment Variables Reference

Variable

Default

Required

Description

MCP_TRANSPORT

stdio

āœ“

Set to streamable-http for web deployment

MCP_HOST

0.0.0.0

HTTP server bind address

MCP_PORT

8000

HTTP server port (some platforms override this)

NITAN_TOKEN

Bearer token for MCP authentication

USCARDFORUM_URL

https://www.uscardforum.com

Forum base URL

USCARDFORUM_TIMEOUT

15.0

Request timeout in seconds

NITAN_USERNAME

Forum username for auto-login (priority method)

NITAN_PASSWORD

Forum password for auto-login (priority method)

NITAN_API_KEY

Discourse User API Key (alternative auth)

NITAN_API_CLIENT_ID

Discourse API Client ID (alternative auth)


Connecting to Your Deployed Server

After deployment, connect from Cursor or other MCP clients using the streamable HTTP URL:

{
  "mcpServers": {
    "uscardforum": {
      "url": "https://your-app.fly.dev/mcp",
      "headers": {
        "Authorization": "Bearer your-nitan-token"
      }
    }
  }
}

Replace the URL with your deployment's URL:

  • Heroku: https://your-app.herokuapp.com/mcp

  • Railway: https://your-app.up.railway.app/mcp

  • Render: https://your-app.onrender.com/mcp

  • Fly.io: https://your-app.fly.dev/mcp

  • Cloud Run: https://your-app-xxxxx-uc.a.run.app/mcp

  • DigitalOcean: https://your-app.ondigitalocean.app/mcp

  • Koyeb: https://your-app.koyeb.app/mcp

Testing

Run integration tests against the live forum:

# Set test credentials
export NITAN_USERNAME="your_test_username"
export NITAN_PASSWORD="your_test_password"

# Run tests
uv run pytest tests/ -v

# Run with coverage
uv run pytest tests/ --cov=uscardforum --cov-report=term-missing

Domain Models

All return types are strongly typed with Pydantic models:

Topic Models

from uscardforum import TopicSummary, TopicInfo, Post

# TopicSummary - for list views
topic: TopicSummary
topic.id          # int: Topic ID
topic.title       # str: Topic title
topic.posts_count # int: Number of posts
topic.views       # int: View count
topic.like_count  # int: Total likes

# TopicInfo - detailed metadata
info: TopicInfo
info.post_count          # int: Total posts
info.highest_post_number # int: Last post number

# Post - individual post
post: Post
post.id           # int: Post ID
post.post_number  # int: Position in topic
post.username     # str: Author
post.cooked       # str: HTML content
post.like_count   # int: Likes

User Models

from uscardforum import UserSummary, UserAction, Badge

# UserSummary - profile overview
summary: UserSummary
summary.username  # str: Username
summary.stats     # UserStats: Activity statistics
summary.badges    # List[Badge]: Earned badges

# UserAction - activity entry
action: UserAction
action.topic_id   # int: Related topic
action.excerpt    # str: Content preview

Search Models

from uscardforum import SearchResult, SearchPost, SearchTopic

# SearchResult - search response
result: SearchResult
result.posts   # List[SearchPost]: Matching posts
result.topics  # List[SearchTopic]: Matching topics
result.users   # List[SearchUser]: Matching users

Auth Models

from uscardforum import LoginResult, Session, Notification, Bookmark

# LoginResult - login response
login: LoginResult
login.success      # bool: Whether succeeded
login.requires_2fa # bool: 2FA needed

# Session - current session
session: Session
session.is_authenticated  # bool: Logged in
session.current_user      # CurrentUser: User info

API Modules

The backend is split into focused API modules:

Module

Purpose

TopicsAPI

Topic lists, posts, pagination

UsersAPI

Profiles, activity, badges, social

SearchAPI

Full-text search

CategoriesAPI

Category mappings

AuthAPI

Login, notifications, bookmarks

Each module inherits from BaseAPI which provides rate-limited HTTP methods.

Available Tools (22 Tools)

šŸ“° Discovery — Find Content to Read

Tool

Return Type

Description

get_hot_topics

List[TopicSummary]

Currently trending topics by engagement

get_new_topics

List[TopicSummary]

Latest topics by creation time

get_top_topics

List[TopicSummary]

Top topics by period (daily/weekly/monthly/yearly)

search_forum

SearchResult

Full-text search with operators

get_categories

CategoryMap

Category ID to name mapping

šŸ“– Reading — Access Topic Content

Tool

Return Type

Description

get_topic_info

TopicInfo

Topic metadata (check post count first!)

get_topic_posts

List[Post]

Fetch ~20 posts starting at position

get_all_topic_posts

List[Post]

Fetch all posts with auto-pagination

šŸ‘¤ Users — Profile & Activity Research

Tool

Return Type

Description

get_user_summary

UserSummary

Profile overview and stats

get_user_topics

List[Dict]

Topics created by user

get_user_replies

List[UserAction]

User's reply history

get_user_actions

List[UserAction]

Full activity feed

get_user_badges

UserBadges

Badges earned by user

get_user_following

FollowList

Who the user follows

get_user_followers

FollowList

Who follows the user

get_user_reactions

UserReactions

Reactions given/received

list_users_with_badge

Dict

Find users with specific badge

šŸ” Auth — Authenticated Actions (requires login)

Tool

Return Type

Description

login

LoginResult

Authenticate with forum credentials

get_current_session

Session

Check authentication status

get_notifications

List[Notification]

Fetch user notifications

bookmark_post

Bookmark

Bookmark a post for later

subscribe_topic

SubscriptionResult

Set topic notification level

Available Prompts (4 Prompts, äø­ę–‡)

Guided workflows for common research tasks:

Prompt

Args

Purpose

research_topic

topic_query

ē ”ē©¶č®ŗå›ē‰¹å®šäø»é¢˜ļ¼Œę€»ē»“ē¤¾åŒŗå…±čÆ†

analyze_user

username

åˆ†ęžē”Øęˆ·čµ„ę–™ć€č“”ēŒ®å’ŒåÆäæ”åŗ¦

find_data_points

subject

ęŸ„ę‰¾ē”Øęˆ·ęŠ„å‘Šēš„ēœŸå®žę•°ę®ē‚¹

compare_cards

card1, card2

ęÆ”č¾ƒäø¤å¼ äæ”ē”Øå”ēš„ē¤¾åŒŗč®Øč®ŗ

Available Resources (3 Resources)

Quick-access static data:

URI

Description

forum://categories

Category ID → name mapping (JSON)

forum://hot-topics

Top 20 trending topics (JSON)

forum://new-topics

Top 20 latest topics (JSON)

Usage Examples

Using the Client Directly

from uscardforum import DiscourseClient

client = DiscourseClient()

# Browse hot topics
for topic in client.get_hot_topics():
    print(f"{topic.title} ({topic.posts_count} posts, {topic.views} views)")

# Get topic info and posts
info = client.get_topic_info(12345)
print(f"Topic has {info.post_count} posts")

posts = client.get_topic_posts(12345)
for post in posts:
    print(f"#{post.post_number} by {post.username}: {post.like_count} likes")

# Search
results = client.search("Chase Sapphire Reserve", order="latest")
for post in results.posts:
    print(f"[Topic {post.topic_id}] {post.blurb}")

# User profile
summary = client.get_user_summary("creditexpert")
print(f"{summary.username}: {summary.stats.post_count} posts")

Forum Authentication

# Login to forum
result = client.login("username", "password")
if result.success:
    print(f"Logged in as {result.username}")
elif result.requires_2fa:
    result = client.login("username", "password", second_factor_token="123456")

# Get notifications
notifications = client.get_notifications(only_unread=True)
for n in notifications:
    print(f"Notification {n.id}: {n.notification_type}")

# Bookmark a post
bookmark = client.bookmark_post(54321, name="Important info")

Architecture

Separation of Concerns

  1. Domain Models (models/)

    • Pydantic models for all return types

    • Strong typing and validation

    • Clear documentation

  2. API Modules (api/)

    • Focused functionality per domain

    • Inherits from BaseAPI for HTTP

    • Returns domain models

  3. Client (client.py)

    • Composes all API modules

    • Unified interface

    • Session management

  4. MCP Server (server.py)

    • FastMCP tool definitions

    • Bearer token authentication

    • Extensive docstrings (Chinese)

    • Prompts and resources

Security

  • MCP Authentication: Bearer token via HTTP Authorization header (MCP transport-level)

  • Rate Limiting: 4 requests per second with exponential backoff

  • Cloudflare Bypass: Automatic handling via cloudscraper

Development

# Install dev dependencies
uv sync --group dev

# Run tests
NITAN_USERNAME="user" NITAN_PASSWORD="pass" uv run pytest

# Lint
uv run ruff check src/

# Type check
uv run mypy src/

License

MIT

Contributing

Contributions welcome! Please:

  1. Fork the repository

  2. Create a feature branch

  3. Submit a pull request

Acknowledgments

Available Tools

22 tools
bookmark_postA
Bookmark a post for later reference. REQUIRES AUTHENTICATION.

Args:
    post_id: The numeric post ID to bookmark
    name: Optional label/name for the bookmark
    reminder_type: Optional reminder setting
    reminder_at: Optional reminder datetime (ISO format)
    auto_delete_preference: When to auto-delete (default: 3)
        - 0: Never
        - 1: When reminder sent
        - 2: On click
        - 3: Clear after 3 days

Must call login() first.

Returns a Bookmark object with the created bookmark information.

Use to save interesting posts for later reference.
ParametersJSON Schema
NameRequiredDescriptionDefault
post_idYesThe numeric post ID to bookmark
nameNoLabel/name for the bookmark
reminder_typeNoReminder setting
reminder_atNoReminder datetime (ISO format)
auto_delete_preferenceNoWhen to auto-delete: 0=never, 1=when reminder sent, 2=on click, 3=after 3 days (default)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesBookmark ID
nameNoBookmark label
reminder_atNoReminder time
bookmarkable_idYesBookmarked item ID
bookmarkable_typeNoType of bookmarked item
auto_delete_preferenceNoAuto-delete setting

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It successfully communicates: 1) authentication requirement ('REQUIRES AUTHENTICATION'), 2) that this is a write operation (implied by 'Bookmark' and 'Returns a Bookmark object'), 3) the return type ('Returns a Bookmark object'), and 4) the purpose ('save interesting posts for later reference'). It doesn't mention rate limits, error conditions, or idempotency, but covers the essential behavioral aspects for a bookmarking tool.

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

Conciseness4/5

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

The description is well-structured with clear sections: purpose statement, authentication requirement, parameter details, prerequisite, return value, and usage guidance. Every sentence serves a purpose, though the auto_delete_preference explanation is somewhat lengthy. It's appropriately sized for a 5-parameter tool with authentication requirements.

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 there's an output schema (implied by 'Returns a Bookmark object'), the description doesn't need to detail return values. It covers authentication requirements, parameter semantics, and usage context effectively. The main gap is lack of information about reminder_type values, but overall it provides sufficient context for an agent to use this tool correctly alongside its sibling read-only tools.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds significant value by: 1) providing a clear enumeration of auto_delete_preference options with explanations (0-3 with meanings), 2) specifying ISO format for reminder_at, and 3) clarifying that name is 'Optional label/name for the bookmark'. This goes well beyond what the schema provides, though it doesn't explain reminder_type values.

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 specific action ('Bookmark a post for later reference') and distinguishes it from all sibling tools which are primarily get/read operations (e.g., get_topic_posts, get_user_actions). It identifies the resource (post) and verb (bookmark) precisely.

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 provides explicit usage guidance: 'Must call login() first' (prerequisite), 'Use to save interesting posts for later reference' (when-to-use), and distinguishes this as a write/mutation tool versus the many read-only sibling tools. It clearly indicates this is for saving posts versus the sibling tools which retrieve information.

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

get_all_topic_postsA
Fetch all posts from a topic with automatic pagination.

Args:
    topic_id: The numeric topic ID
    include_raw: Include markdown source (default: False)
    start_post_number: First post to fetch (default: 1)
    end_post_number: Last post to fetch (optional, fetches to end if not set)
    max_posts: Maximum number of posts to return (optional safety limit)

This automatically handles pagination to fetch multiple batches.

IMPORTANT: For topics with many posts (>100), use max_posts to limit
the response size. You can always fetch more with start_post_number.

Use cases:
- Fetch entire small topic: get_all_topic_posts(topic_id=123)
- Fetch first 50 posts: get_all_topic_posts(topic_id=123, max_posts=50)
- Fetch posts 51-100: get_all_topic_posts(topic_id=123, start_post_number=51, max_posts=50)
- Fetch specific range: get_all_topic_posts(topic_id=123, start=10, end=30)

Returns the same Post structure as get_topic_posts but for all matching posts.

Pro tip: Use get_topic_info first to check post_count before deciding
whether to fetch all or paginate manually.
ParametersJSON Schema
NameRequiredDescriptionDefault
topic_idYesThe numeric topic ID
include_rawNoInclude markdown source (default: False)
start_post_numberNoFirst post to fetch (default: 1)
end_post_numberNoLast post to fetch (optional, fetches to end if not set)
max_postsNoMaximum number of posts to return (optional safety limit)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden and does an excellent job disclosing key behavioral traits: automatic pagination handling, performance considerations for large topics, safety limits via max_posts, and relationship to sibling tool's return structure. It doesn't mention rate limits or authentication requirements, but provides substantial operational guidance.

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 clear sections (purpose, args, pagination note, important warning, use cases, returns, pro tip) and every sentence adds value. It's slightly longer than minimal but efficiently communicates complex functionality. The front-loaded purpose statement immediately conveys the tool's core value.

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 (automatic pagination, multiple filtering parameters) and the presence of an output schema (which handles return value documentation), this description is exceptionally complete. It covers purpose, usage guidelines, parameter interactions, performance considerations, sibling tool relationships, and practical examples - everything needed for effective tool selection and invocation.

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 100% schema description coverage, the baseline is 3, but the description adds significant value beyond the schema by explaining parameter interactions and practical usage patterns. The use cases section demonstrates how parameters work together, and the IMPORTANT note clarifies when to use max_posts versus start/end parameters.

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 with specific verb ('fetch') and resource ('all posts from a topic'), and distinguishes it from sibling 'get_topic_posts' by emphasizing automatic pagination for complete topic retrieval. The title 'get_all_topic_posts' aligns perfectly with this functionality.

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 provides explicit guidance on when to use this tool versus alternatives, including: recommending 'get_topic_info first to check post_count before deciding whether to fetch all or paginate manually', suggesting 'max_posts' for topics with many posts (>100), and providing multiple concrete use cases with parameter examples.

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

get_categoriesA
Get a mapping of all forum categories.

Returns a CategoryMap object with category_id to category name mapping.
Categories organize topics by subject area.

Common USCardForum categories include sections for:
- Credit card applications and approvals
- Bank account bonuses
- Travel and redemptions
- Data points and experiences

Use category IDs to:
- Filter search results by category
- Understand which section a topic belongs to
- Navigate to specific areas of interest

The mapping includes both main categories and subcategories.
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
categoriesNoID to name mapping

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and does well by disclosing key behaviors: it returns a CategoryMap object, includes both main and subcategories, and lists common category examples. It does not cover potential limitations like rate limits or auth needs, but provides useful context beyond basic functionality.

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 and front-loaded, starting with the core purpose and return value, followed by examples and usage scenarios. Every sentence adds value, such as explaining category organization and practical applications, with no wasted words or redundancy.

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

Completeness5/5

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

Given the tool's low complexity (0 parameters), high schema coverage (100%), and presence of an output schema (true), the description is complete. It explains what the tool does, what it returns, and how to use the output, covering all necessary context without needing to detail parameters or return values explicitly.

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 0 parameters, and schema description coverage is 100%, so the baseline is 4. The description appropriately does not discuss parameters, focusing instead on output and usage, which adds value without redundancy.

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 'Get' and resource 'mapping of all forum categories', specifying it returns a CategoryMap object. It distinguishes from siblings by focusing on category mapping rather than topics, posts, users, or other forum entities, making the purpose specific and differentiated.

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

Usage Guidelines4/5

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

The description provides clear context on when to use this tool, such as for filtering search results, understanding topic sections, and navigation. However, it does not explicitly state when not to use it or name alternatives among sibling tools, leaving some guidance implicit rather than explicit.

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

get_current_sessionA
Get information about the current session.

Returns a Session object with:
- is_authenticated: Whether logged in
- current_user: CurrentUser object with user info (if authenticated)

Use to verify authentication status.
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
current_userNoLogged-in user
is_authenticatedNoWhether authenticated

TDQS

A3.9/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 that the tool returns a Session object with specific fields (is_authenticated, current_user), which adds behavioral context beyond just stating the purpose. However, it doesn't mention potential errors, rate limits, or other operational details. The description adds some value but is 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?

The description is concise and well-structured: it starts with the core purpose, details the return values in a bulleted list, and ends with usage guidance. Every sentence adds value without redundancy, making it easy to scan and understand.

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 low complexity (0 parameters, simple purpose) and the presence of an output schema (implied by 'Returns a Session object'), the description is fairly complete. It explains what the tool does and what it returns, though it could benefit from more behavioral context (e.g., error cases). The output schema reduces the need for detailed return value explanations.

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 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately doesn't discuss parameters, which is efficient. Baseline is 4 for zero parameters, as it avoids unnecessary 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 the tool's purpose: 'Get information about the current session.' It specifies the verb ('Get') and resource ('current session'), but doesn't explicitly differentiate it from sibling tools like 'login' or 'get_user_summary', which might also relate to authentication or user data. The purpose is clear but lacks sibling differentiation.

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

Usage Guidelines4/5

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

The description provides clear usage context: 'Use to verify authentication status.' This indicates when to use the tool (for checking login state), but doesn't explicitly state when not to use it or name alternatives among siblings (e.g., 'login' for authentication actions). The guidance is helpful but not exhaustive.

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

get_hot_topicsA
Fetch currently trending/hot topics from USCardForum.

This returns the most actively discussed topics right now, ranked by
engagement metrics like recent replies, views, and likes.

Use this to:
- See what the community is currently discussing
- Find breaking news or time-sensitive opportunities
- Discover popular ongoing discussions

Args:
    page: Page number for pagination (0-indexed). Use page=1 to get more topics.

Returns a list of TopicSummary objects with fields:
- id: Topic ID (use with get_topic_posts)
- title: Topic title
- posts_count: Total replies
- views: View count
- like_count: Total likes
- created_at: Creation timestamp
- last_posted_at: Last activity timestamp

Example response interpretation:
A topic with high views but low posts may be informational.
A topic with many recent posts is actively being discussed.
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination (0-indexed, default: 0)

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 provided, the description carries full burden and does well by explaining the ranking logic ('engagement metrics like recent replies, views, and likes'), pagination behavior, and response interpretation. It doesn't mention rate limits or authentication needs, but covers core behavioral aspects adequately.

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 (purpose, usage guidelines, parameters, returns, examples), front-loaded with the core purpose, and every sentence adds value without redundancy. It's appropriately sized for the tool's complexity.

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 moderate complexity, no annotations, but with output schema (implied by 'Returns a list of TopicSummary objects'), the description provides complete context: clear purpose, usage guidelines, parameter explanation, return format details, and practical interpretation examples, covering all necessary aspects.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds minimal value beyond the schema by clarifying 'Use page=1 to get more topics', but doesn't provide additional semantic context about parameter behavior or constraints.

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 with specific verbs ('fetch trending/hot topics') and resource ('from USCardForum'), distinguishing it from siblings like get_top_topics, get_new_topics, or get_categories by specifying it's based on current engagement metrics.

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

Usage Guidelines5/5

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

The description explicitly provides usage scenarios ('See what the community is currently discussing', 'Find breaking news', 'Discover popular ongoing discussions') and distinguishes it from alternatives by noting the returned data can be used with get_topic_posts, offering clear guidance on when to use this tool.

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

get_new_topicsA
Fetch the latest/newest topics from USCardForum.

Returns recently created topics sorted by creation time (newest first).
These may have fewer replies but contain fresh information.

Use this to:
- Find newly posted deals or offers
- See fresh questions from the community
- Discover emerging discussions before they get popular

Args:
    page: Page number for pagination (0-indexed). Use page=1 to get more topics.

Returns a list of TopicSummary objects with:
- id: Topic ID
- title: Topic title
- posts_count: Number of posts
- created_at: When the topic was created
- category_id: Which forum section it's in

Tip: New topics with high view counts may indicate important news.
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination (0-indexed, default: 0)

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?

With no annotations provided, the description carries the full burden and does well by disclosing key behaviors: it describes the sorting order ('newest first'), notes that topics may have fewer replies, explains pagination behavior, and details the return structure. However, it doesn't mention potential rate limits or authentication requirements, which could be relevant for a forum API.

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 and front-loaded with the core purpose, followed by usage guidelines, parameter details, return values, and a helpful tip. Every sentence adds value without redundancy, making it efficient and easy to parse.

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 moderate complexity (1 parameter, read-only operation), no annotations, and the presence of an output schema, the description is complete: it covers purpose, usage, parameter semantics, return values, and behavioral context, leaving no significant gaps for an agent to understand and invoke the tool correctly.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds value by explaining the pagination logic ('0-indexed', 'Use page=1 to get more topics') and providing context about what 'page' represents in this specific tool, elevating it above the baseline.

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verbs ('fetch', 'returns') and resources ('latest/newest topics from USCardForum'), distinguishing it from siblings like get_hot_topics or get_top_topics by emphasizing recency and freshness rather than popularity or ranking.

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?

It provides explicit usage scenarios ('Find newly posted deals', 'See fresh questions', 'Discover emerging discussions') and includes a tip about high view counts, offering clear guidance on when to use this tool versus alternatives like search_forum or get_hot_topics for different types of content discovery.

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

get_notificationsA
Fetch your notifications. REQUIRES AUTHENTICATION.

Args:
    since_id: Only get notifications newer than this ID (optional)
    only_unread: Only return unread notifications (default: False)
    limit: Maximum number to return (optional)

Must call login() first.

Returns a list of Notification objects with:
- id: Notification ID
- notification_type: Type of notification
- read: Whether read
- topic_id: Related topic
- post_number: Related post
- created_at: When created

Use to:
- Check for new replies to your posts
- See mentions and likes
- Track topic updates you're watching
ParametersJSON Schema
NameRequiredDescriptionDefault
since_idNoOnly get notifications newer than this ID
only_unreadNoOnly return unread notifications
limitNoMaximum number to return

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 provided, the description carries full burden and does well by disclosing authentication requirement ('REQUIRES AUTHENTICATION'), pagination behavior ('Maximum number to return'), and filtering capabilities. It doesn't mention rate limits or error conditions, but covers core behavioral aspects adequately.

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 clear sections (Args, Returns, Use to), but could be more concise. The authentication warning appears twice ('REQUIRES AUTHENTICATION' and 'Must call login() first'), and the parameter descriptions repeat schema content. However, information is front-loaded and organized effectively.

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 read operation with 3 parameters and an output schema, the description is complete. It covers authentication requirements, parameter usage, return format details, and specific use cases. With an output schema present, it doesn't need to explain return values in detail, and it provides adequate context for the tool's purpose and usage.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already fully documents all three parameters. The description repeats the parameter information in the Args section but doesn't add meaningful semantic context beyond what's in the schema. Baseline 3 is appropriate when schema does the heavy lifting.

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 'fetch' and resource 'notifications', distinguishing it from siblings like get_user_actions or get_user_replies which focus on different data. It specifies it's for 'your notifications' (personal notifications) rather than system-wide notifications.

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 states 'Must call login() first' for authentication prerequisite, and provides three specific use cases: 'Check for new replies to your posts', 'See mentions and likes', and 'Track topic updates you're watching'. This gives clear context for when to use this tool versus alternatives.

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

get_topic_infoA
Get metadata about a specific topic without fetching all posts.

Args:
    topic_id: The numeric topic ID (from URLs like /t/slug/12345)

Use this FIRST before reading a topic to:
- Check how many posts it contains (for pagination planning)
- Get the topic title and timestamps
- Decide whether to fetch all posts or paginate

Returns a TopicInfo object with:
- topic_id: The topic ID
- title: Full topic title
- post_count: Total number of posts
- highest_post_number: Last post number (may differ from count if posts deleted)
- last_posted_at: When the last reply was made

Strategy for large topics:
- <50 posts: Safe to fetch all at once
- 50-200 posts: Consider using max_posts parameter
- >200 posts: Fetch in batches or summarize key posts
ParametersJSON Schema
NameRequiredDescriptionDefault
topic_idYesThe numeric topic ID (from URLs like /t/slug/12345)

Output Schema

ParametersJSON Schema
NameRequiredDescription
titleNoTopic title
topic_idYesTopic identifier
post_countNoTotal number of posts
last_posted_atNoLast activity time
highest_post_numberNoHighest post number

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior: it's a read-only operation (implied by 'Get metadata'), returns a TopicInfo object with specific fields, and includes practical advice like handling large topics with batch fetching. However, it doesn't mention potential errors, rate limits, or authentication needs, leaving some gaps.

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 clear sections (purpose, args, usage, returns, strategy) and is appropriately sized. However, the 'Args' section is redundant with the schema, and the strategy section, while helpful, could be more concise. Overall, it's efficient but has minor verbosity.

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 (simple read operation), 100% schema coverage, and the presence of an output schema (implied by the 'Returns' section), the description is complete. It covers purpose, usage, parameters, return values, and strategic advice, leaving no significant gaps for an AI agent to understand and invoke the tool correctly.

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

Parameters3/5

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

The schema description coverage is 100%, so the input schema already documents the topic_id parameter. The description repeats the same information in the 'Args' section without adding new semantics beyond what's in the schema. This meets the baseline of 3, as the schema does the heavy lifting, but no extra value 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's purpose: 'Get metadata about a specific topic without fetching all posts.' It specifies the verb ('Get metadata') and resource ('a specific topic'), and distinguishes it from sibling tools like get_all_topic_posts and get_topic_posts by emphasizing it doesn't fetch posts, focusing only on metadata.

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 provides explicit guidance on when to use this tool: 'Use this FIRST before reading a topic to...' and includes a 'Strategy for large topics' section with thresholds (e.g., <50 posts: safe to fetch all at once). It implicitly distinguishes from alternatives like get_all_topic_posts by advising on pagination planning.

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

get_topic_postsA
Fetch a batch of posts from a topic starting at a specific position.

Args:
    topic_id: The numeric topic ID
    post_number: Which post number to start from (default: 1 = first post)
    include_raw: Include raw markdown source (default: False, returns HTML)

This fetches ~20 posts per call starting from post_number.
Use for paginated reading of topics.

Returns a list of Post objects with:
- post_number: Position in topic (1, 2, 3...)
- username: Author's username
- cooked: HTML content of the post
- raw: Markdown source (if include_raw=True)
- created_at: When posted
- updated_at: Last edit time
- like_count: Number of likes
- reply_count: Number of direct replies
- reply_to_post_number: Which post this replies to (if any)

Pagination example:
1. Call with post_number=1, get posts 1-20
2. Call with post_number=21, get posts 21-40
3. Continue until no posts returned
ParametersJSON Schema
NameRequiredDescriptionDefault
topic_idYesThe numeric topic ID
post_numberNoWhich post number to start from (default: 1 = first post)
include_rawNoInclude raw markdown source (default: False, returns HTML)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key traits: it's a read operation (implied by 'Fetch'), specifies batch size ('~20 posts per call'), explains pagination behavior, and details the return format with Post object fields. This covers essential behavioral aspects without 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 clear sections (purpose, args, returns, example) and front-loaded key information. It is appropriately sized for the tool's complexity, though the detailed return field list and pagination example are slightly verbose but justified for clarity. A minor deduction for length keeps it at 4.

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 moderate complexity, no annotations, and an output schema (implied by the detailed return description), the description is complete. It covers purpose, usage, parameters, behavior, and output format, providing all necessary context for an agent to use the tool effectively without gaps.

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

Parameters3/5

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

Schema description coverage is 100%, meaning the input schema already documents all parameters thoroughly. The description repeats parameter info in the 'Args' section without adding significant meaning beyond the schema, such as edge cases or constraints. This meets the baseline of 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 the tool's purpose with a specific verb ('Fetch') and resource ('posts from a topic'), and distinguishes it from siblings like 'get_all_topic_posts' by specifying it fetches a batch starting at a position, not all posts. This explicit differentiation earns the highest score.

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 provides explicit usage guidelines: it states 'Use for paginated reading of topics' and includes a detailed pagination example with steps, clearly indicating when to use this tool versus alternatives like 'get_all_topic_posts' for non-paginated access. This comprehensive guidance merits a score of 5.

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

get_top_topicsA
Fetch top-performing topics for a specific time period.

Args:
    period: Time window for ranking. Must be one of:
        - "daily": Top topics from today
        - "weekly": Top topics this week
        - "monthly": Top topics this month (default)
        - "quarterly": Top topics this quarter
        - "yearly": Top topics this year
    page: Page number for pagination (0-indexed). Use page=1 to get more topics.

Use this to:
- Find the most valuable discussions in a time range
- Research historically important threads
- Identify evergreen popular content

Returns TopicSummary objects sorted by engagement score.

Example: Use "yearly" to find the most impactful discussions,
or "daily" to see what's trending today.
ParametersJSON Schema
NameRequiredDescriptionDefault
periodNoTime window for ranking: 'daily', 'weekly', 'monthly' (default), 'quarterly', or 'yearly'monthly
pageNoPage number for pagination (0-indexed, default: 0)

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?

With no annotations provided, the description carries the full burden. It discloses that results are sorted by engagement score and paginated, which are key behavioral traits. However, it doesn't mention rate limits, authentication needs, or error handling, leaving some gaps for a tool with no annotation coverage.

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

Conciseness5/5

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

The description is well-structured with clear sections (purpose, args, usage, returns, example), front-loaded key information, and every sentence adds value without redundancy. It's appropriately sized for a tool with two parameters and clear functionality.

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 moderate complexity, 100% schema coverage, and presence of an output schema (implied by 'Returns TopicSummary objects'), the description is complete enough. It covers purpose, parameters, usage contexts, return format, and provides examples, addressing all necessary aspects without needing to explain return values in detail.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already fully documents parameters. The description adds minimal value by listing enum values for 'period' and explaining pagination, but doesn't provide additional semantics beyond what's in the schema, meeting the baseline for high coverage.

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verb ('fetch') and resource ('top-performing topics'), and distinguishes it from siblings like 'get_hot_topics' or 'get_new_topics' by focusing on performance ranking over time periods rather than recency or popularity alone.

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 'Use this to' section provides clear contexts for when to use the tool (e.g., finding valuable discussions, researching historical threads, identifying evergreen content), but it doesn't explicitly state when not to use it or name alternatives among siblings like 'get_hot_topics' for current trends.

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

get_user_actionsA
Fetch a user's activity feed with optional filtering.

Args:
    username: The user's handle
    filter: Action type filter (optional). Common values:
        - 1: Likes given
        - 2: Likes received
        - 4: Topics created
        - 5: Replies posted
        - 6: Posts (all)
        - 7: Mentions
    offset: Pagination offset (0, 30, 60, ...)

Returns a list of UserAction objects showing what the user has done.

Use this for detailed activity analysis beyond just replies.
For most cases, get_user_replies or get_user_topics are simpler.
ParametersJSON Schema
NameRequiredDescriptionDefault
usernameYesThe user's handle
filterNoAction type filter: 1=likes given, 2=likes received, 4=topics created, 5=replies posted, 6=all posts, 7=mentions
offsetNoPagination offset (0, 30, 60, ...)

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 that the tool fetches an activity feed with optional filtering and pagination, and mentions it returns 'a list of UserAction objects.' However, it lacks details on rate limits, authentication needs, error conditions, or the structure of UserAction objects. For a tool with no annotations, this is a moderate disclosure but misses key behavioral aspects.

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 sized and front-loaded, starting with the core purpose. The bulleted list for filter values is efficient, and the usage guidelines are concise. However, the 'Args:' section slightly duplicates schema information, and the structure could be more streamlined by integrating the parameter details into the main flow without separate headings.

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

Completeness4/5

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

Given the tool's moderate complexity (3 parameters, 1 required), 100% schema coverage, and the presence of an output schema (implied by 'Returns a list of UserAction objects'), the description is largely complete. It covers purpose, usage guidelines, and basic parameter context. The main gap is the lack of behavioral details like rate limits or auth requirements, but the output schema reduces the need to explain return values 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 description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds minimal value beyond the schema: it repeats the filter values in a bulleted list and clarifies the offset as 'Pagination offset (0, 30, 60, ...)', which is already in the schema. This meets the baseline of 3 since the schema does the heavy lifting, but the description doesn't add significant semantic context.

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 specific action ('Fetch a user's activity feed') and resource ('user'), distinguishing it from sibling tools like get_user_replies or get_user_topics by emphasizing it provides 'detailed activity analysis beyond just replies.' This explicitly differentiates its broader scope from more focused sibling tools.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool versus alternatives: 'Use this for detailed activity analysis beyond just replies. For most cases, get_user_replies or get_user_topics are simpler.' This clearly defines the context (detailed analysis) and names specific simpler alternatives, helping the agent choose appropriately.

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

get_user_badgesA
Fetch badges earned by a user.

Args:
    username: The user's handle
    grouped: Group badges by type (default: True)

Returns a UserBadges object with:
- badges: List of Badge objects with name, description, granted_at
- badge_types: Badge type information

Badges indicate:
- Participation milestones (first post, anniversaries)
- Community recognition (editor, leader)
- Special achievements

Use to assess user experience and trustworthiness.
ParametersJSON Schema
NameRequiredDescriptionDefault
usernameYesThe user's handle
groupedNoGroup badges by type (default: True)

Output Schema

ParametersJSON Schema
NameRequiredDescription
badgesNoEarned badges
badge_typesNoBadge type info

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes what the tool returns (a UserBadges object with specific fields) and explains the significance of badges (e.g., participation milestones, community recognition). It also clarifies the default behavior for the 'grouped' parameter. However, it does not cover potential errors, rate limits, or authentication needs, leaving some behavioral aspects unspecified.

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 clear sections (purpose, args, returns, badge significance, usage), making it easy to parse. It is appropriately sized, though the 'Args' section slightly repeats schema information. Most sentences add value, such as explaining badge types and usage context, with minimal 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?

Given the tool's moderate complexity (2 parameters, no annotations, but with an output schema), the description is largely complete. It explains the purpose, parameters, return structure, and usage context. Since an output schema exists, it does not need to detail return values extensively. However, it could improve by addressing potential errors or authentication requirements, which are not covered.

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

Parameters3/5

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

The schema description coverage is 100%, meaning the input schema already documents both parameters ('username' and 'grouped') with descriptions and defaults. The description repeats some of this information in the 'Args' section but adds minimal extra meaning beyond what the schema provides, such as clarifying that 'username' is a handle. This meets the baseline for high schema coverage.

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

Purpose5/5

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

The description clearly states the verb ('Fetch') and resource ('badges earned by a user'), making the purpose specific. It distinguishes this tool from siblings like 'get_user_summary' or 'list_users_with_badge' by focusing on badge retrieval for a specific user rather than general user data or badge listings across users.

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

Usage Guidelines3/5

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

The description provides implied usage by stating 'Use to assess user experience and trustworthiness,' which gives context for when to employ this tool. However, it lacks explicit guidance on when to choose this over alternatives like 'get_user_summary' or 'list_users_with_badge,' and does not mention any exclusions or prerequisites.

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

get_user_followersA
Fetch the list of users following a specific user.

Args:
    username: The user's handle
    page: Page number for pagination (optional)

Returns a FollowList object with:
- users: List of FollowUser objects
- total_count: Total followers

A high follower count often indicates an influential
or helpful community member.
ParametersJSON Schema
NameRequiredDescriptionDefault
usernameYesThe user's handle
pageNoPage number for pagination

Output Schema

ParametersJSON Schema
NameRequiredDescription
usersNoUser list
total_countNoTotal users

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 the full burden. It mentions pagination and the return structure, but fails to disclose critical behavioral traits like authentication requirements, rate limits, error conditions (e.g., invalid username), or whether the data is real-time or cached. For a read operation with no annotation coverage, this leaves 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.

Conciseness4/5

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

The description is well-structured with clear sections (purpose, args, returns, note) and front-loaded the core functionality. However, the final sentence about 'high follower count' is somewhat tangential and doesn't directly aid tool invocation, slightly reducing efficiency.

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

Completeness4/5

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

Given the tool's moderate complexity (2 parameters, read-only operation), the description covers purpose, parameters, and return values adequately, especially with an output schema implied by the 'Returns' section. However, it lacks context on authentication, errors, or performance limits, which are important for a user-facing API tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters ('username' and 'page') fully. The description repeats the parameter info without adding meaningful context beyond what's in the schema, such as format examples for 'username' or default pagination behavior. Baseline 3 is appropriate when schema does the heavy lifting.

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 specific action ('Fetch the list of users following a specific user'), identifies the resource ('users following a specific user'), and distinguishes it from siblings like 'get_user_following' (which fetches users being followed) and 'get_user_summary' (which provides general user info). The verb 'fetch' is precise and the scope is well-defined.

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 needing follower lists for a user, but provides no explicit guidance on when to use this tool versus alternatives like 'get_user_summary' (which might include follower count) or 'get_user_following'. It lacks clear exclusions or prerequisites, such as whether the user must exist or be public.

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

get_user_followingA
Fetch the list of users that a user follows.

Args:
    username: The user's handle
    page: Page number for pagination (optional)

Returns a FollowList object with:
- users: List of FollowUser objects
- total_count: Total users being followed

Use to:
- Discover influential users in the community
- Find related experts
- Map social connections
ParametersJSON Schema
NameRequiredDescriptionDefault
usernameYesThe user's handle
pageNoPage number for pagination

Output Schema

ParametersJSON Schema
NameRequiredDescription
usersNoUser list
total_countNoTotal users

TDQS

A3.9/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 that the tool returns a FollowList object with details like pagination (via the 'page' parameter and 'total_count'), which adds behavioral context. However, it lacks information on rate limits, authentication needs, or error handling, leaving gaps for a tool with no 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 sized and front-loaded with the core purpose, followed by structured sections for args, returns, and usage. Every sentence earns its place, but the repetition of parameter details in 'Args:' could be slightly trimmed since they're covered in the schema, keeping it efficient but not perfectly concise.

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 complexity (simple read operation with pagination), no annotations, and the presence of an output schema (which covers return values), the description is mostly complete. It explains the purpose, parameters, returns, and usage context. However, it lacks details on behavioral aspects like rate limits or errors, which would enhance completeness for a tool with no annotations.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters ('username' and 'page') fully. The description repeats the parameter info in the 'Args:' section but adds no additional meaning beyond what the schema provides, such as format examples or constraints. Baseline 3 is appropriate as the schema handles the heavy lifting.

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 specific action ('Fetch the list of users that a user follows') with the resource ('users'), distinguishing it from sibling tools like get_user_followers (which fetches followers) and get_user_summary (which provides a summary). The verb 'fetch' is precise and the scope is well-defined.

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 'Use to:' section provides clear context for when to use this tool (e.g., 'Discover influential users in the community'), but it does not explicitly state when not to use it or name alternatives. For example, it doesn't contrast with get_user_followers or other user-related tools, though the purpose is distinct enough to imply usage.

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

get_user_reactionsA
Fetch a user's post reactions (likes, etc.).

Args:
    username: The user's handle
    offset: Pagination offset (optional)

Returns a UserReactions object with reaction data.

Use to see what content a user has reacted to,
which can indicate their interests and values.
ParametersJSON Schema
NameRequiredDescriptionDefault
usernameYesThe user's handle
offsetNoPagination offset

Output Schema

ParametersJSON Schema
NameRequiredDescription
reactionsNoReaction data

TDQS

A3.7/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 that the tool fetches data (implied read-only) and mentions pagination via the offset parameter, but lacks details on rate limits, authentication needs, error handling, or what specific data is included in the UserReactions object. The description adds some behavioral context but is incomplete for a tool with no 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 well-structured and appropriately sized, with a clear purpose statement, parameter details, return value, and usage context in separate sentences. It is front-loaded with the main action. Minor redundancy in parameter descriptions slightly reduces efficiency, but overall it is concise and 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?

Given that there is an output schema (implied by 'Returns a UserReactions object'), the description does not need to explain return values in detail. It covers the tool's purpose, parameters, and usage context adequately. However, for a tool with no annotations, it could benefit from more behavioral details like authentication or rate limits to be fully complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters (username and offset) fully. The description repeats the parameter information in the 'Args' section but does not add meaningful semantics beyond what the schema provides, such as format examples or constraints. Baseline 3 is appropriate when schema coverage is high.

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 specific action ('Fetch') and resource ('a user's post reactions'), distinguishing it from sibling tools like get_user_actions or get_user_summary by focusing specifically on reactions (likes, etc.). The purpose is precise and not a tautology of the tool name.

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

Usage Guidelines3/5

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

The description provides implied usage context ('Use to see what content a user has reacted to, which can indicate their interests and values'), suggesting when this tool might be helpful. However, it does not explicitly state when to use this tool versus alternatives like get_user_actions or get_user_replies, nor does it provide exclusions or prerequisites.

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

get_user_repliesA
Fetch replies/posts made by a user in other topics.

Args:
    username: The user's handle
    offset: Pagination offset (0, 30, 60, ...)

Returns a list of UserAction objects with:
- topic_id: Which topic they replied to
- post_number: Their post number in that topic
- title: Topic title
- excerpt: Preview of their reply
- created_at: When they replied

Use this to:
- See a user's contributions across topics
- Find their data points and experiences
- Evaluate the quality of their participation

Paginate with offset in increments of 30.
ParametersJSON Schema
NameRequiredDescriptionDefault
usernameYesThe user's handle
offsetNoPagination offset (0, 30, 60, ...)

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 provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: it's a read operation (implied by 'Fetch'), pagination details (offset increments of 30), and the return format (list of UserAction objects with specific fields). It doesn't mention rate limits, authentication needs, or error conditions, but provides substantial operational context.

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 clear sections (purpose, args, returns, usage, pagination note) and appropriately sized. Every sentence adds value, though the parameter section slightly duplicates schema information. It's front-loaded with the core purpose first.

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 moderate complexity, 100% schema coverage, and the presence of an output schema (implied by the detailed return description), the description is complete enough. It covers purpose, parameters, return format, usage scenarios, and pagination behavior, providing all necessary context for effective tool selection and invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already fully documents both parameters. The description repeats the parameter information verbatim without adding additional semantic context beyond what's in the schema (e.g., format examples for username, constraints for offset). The baseline of 3 is appropriate when the schema does the heavy lifting.

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 with a specific verb ('Fetch') and resource ('replies/posts made by a user in other topics'), distinguishing it from siblings like 'get_user_topics' (which would fetch topics created by the user) and 'get_user_actions' (which might include other action types). It precisely defines what the tool retrieves.

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

Usage Guidelines5/5

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

The description explicitly provides usage guidelines with 'Use this to:' followed by three specific scenarios (see contributions, find data points, evaluate participation), giving clear context for when to use this tool. It also mentions pagination behavior, which is a practical usage instruction.

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

get_user_summaryA
Fetch a comprehensive summary of a user's profile.

Args:
    username: The user's handle (case-insensitive)

Returns a UserSummary object with:
- user_id: User ID
- username: Username
- stats: UserStats with posts, topics, likes given/received, etc.
- badges: List of recent Badge objects
- top_topics: Most successful topics
- top_replies: Most successful replies

Use this to:
- Evaluate a user's credibility and experience
- Find their most valuable contributions
- Understand their participation level

The summary provides a quick overview without fetching
individual post histories.
ParametersJSON Schema
NameRequiredDescriptionDefault
usernameYesThe user's handle (case-insensitive)

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameNoDisplay name
statsNoUser statistics
badgesNoRecent badges
user_idNoUser ID
usernameNoUsername
created_atNoAccount creation date
top_topicsNoTop topics
top_repliesNoTop replies
last_seen_atNoLast seen online

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior by specifying what data is returned (UserSummary object with detailed fields), its purpose for evaluation, and its efficiency advantage over fetching individual histories. However, it doesn't mention potential limitations like rate limits or authentication needs.

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 and front-loaded, starting with the core purpose, followed by parameter and return details, and ending with usage guidelines. Every sentence adds value without redundancy, making it efficient and easy to parse.

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 moderate complexity, no annotations, and the presence of an output schema (implied by the Returns section), the description is complete. It covers purpose, parameters, return values, and usage context adequately, leaving no significant gaps for an AI agent to understand and invoke the tool correctly.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds value by reiterating the parameter's purpose ('The user's handle') and noting it's case-insensitive, which provides useful context beyond the schema's basic documentation, though it doesn't introduce new parameter 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 tool's purpose with a specific verb ('Fetch') and resource ('comprehensive summary of a user's profile'), distinguishing it from siblings like get_user_badges or get_user_topics by emphasizing it provides a holistic overview rather than specific data points.

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 outlines when to use this tool ('to evaluate credibility, find valuable contributions, understand participation level') and distinguishes it from alternatives by noting it provides 'a quick overview without fetching individual post histories,' which helps differentiate it from more granular sibling tools.

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

get_user_topicsA
Fetch topics created by a specific user.

Args:
    username: The user's handle
    page: Page number for pagination (optional)

Returns a list of topic objects with:
- id: Topic ID
- title: Topic title
- posts_count: Number of replies
- views: View count
- created_at: When created
- category_id: Forum category

Use this to:
- See what discussions a user has initiated
- Find expert users in specific areas
- Research a user's areas of interest

Paginate by incrementing the page parameter.
ParametersJSON Schema
NameRequiredDescriptionDefault
usernameYesThe user's handle
pageNoPage number for pagination

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?

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior: it fetches data (read-only implied by 'Fetch'), returns a list of topic objects with specific fields, and includes pagination guidance. It doesn't mention rate limits or authentication needs, but covers the core functionality well.

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 and front-loaded with the core purpose, followed by parameter details, return format, usage guidelines, and pagination instruction. Every sentence adds value with no redundancy or 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 the tool's moderate complexity, 100% schema coverage, and the presence of an output schema (implied by the detailed return format description), the description is complete. It covers purpose, parameters, return values, usage scenarios, and behavioral aspects like pagination, providing all necessary context for effective tool use.

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

Parameters4/5

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

Schema description coverage is 100%, so the schema already documents both parameters. The description adds value by explaining the pagination behavior ('Paginate by incrementing the page parameter') and clarifying the username as 'user's handle', which provides practical usage context beyond the schema's basic 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 specific action ('Fetch topics created by a specific user') and resource ('topics'), distinguishing it from sibling tools like get_user_replies or get_user_summary by focusing on topics initiated by the user rather than replies or general user data.

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

Usage Guidelines5/5

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

The description explicitly provides usage scenarios ('See what discussions a user has initiated', 'Find expert users in specific areas', 'Research a user's areas of interest'), giving clear context for when to use this tool versus alternatives like get_user_replies or get_topic_info.

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

list_users_with_badgeA
List all users who have earned a specific badge.

Args:
    badge_id: The numeric badge ID
    offset: Pagination offset (optional)

Returns a dictionary with user badge information.

Use to find community members with specific achievements
or recognition levels.
ParametersJSON Schema
NameRequiredDescriptionDefault
badge_idYesThe numeric badge ID
offsetNoPagination offset

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 the full burden. It mentions pagination via the 'offset' parameter and implies read-only behavior by describing a list operation, but lacks details on rate limits, authentication needs, or what specific information is included in the returned dictionary. The description adds some behavioral context but is incomplete for a tool with no annotations.

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

Conciseness5/5

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

The description is well-structured and front-loaded with the core purpose, followed by parameter details and usage context. Every sentence earns its place without redundancy, making it efficient and easy to parse.

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 description does not need to explain return values. It covers the tool's purpose, parameters, and usage context adequately. However, with no annotations and a read operation, it could benefit from more behavioral details like pagination behavior or error handling, leaving minor 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?

Schema description coverage is 100%, so the schema already documents both parameters fully. The description adds minimal value by briefly mentioning 'badge_id' and 'offset' in the Args section, but does not provide additional semantics beyond what the schema offers. With high schema coverage, the baseline is 3, but the explicit Args listing slightly enhances clarity, warranting a 4.

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 specific action ('List all users who have earned a specific badge') with the resource ('users'), distinguishing it from sibling tools like 'get_user_badges' (which gets badges for a user rather than users for a badge). The purpose is precise and unambiguous.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool ('Use to find community members with specific achievements or recognition levels'), which helps differentiate it from general user-related tools. However, it does not explicitly mention when not to use it or name specific alternatives among siblings, such as 'get_user_badges' for a different perspective.

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

loginA
Authenticate with USCardForum credentials.

Args:
    username: Your forum username
    password: Your forum password
    second_factor_token: 2FA code if you have 2FA enabled (optional)

IMPORTANT: Only use this if you need authenticated features like:
- Reading notifications
- Bookmarking posts
- Subscribing to topics

Most read operations work without authentication.

Returns a LoginResult with:
- success: Whether login succeeded
- username: Logged-in username
- error: Error message if failed
- requires_2fa: Whether 2FA is required

The session remains authenticated for subsequent calls.

Security note: Credentials are used only for this session
and are not persisted.
ParametersJSON Schema
NameRequiredDescriptionDefault
usernameYesYour forum username
passwordYesYour forum password
second_factor_tokenNo2FA code if you have 2FA enabled

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoError message if failed
successYesWhether login succeeded
usernameNoLogged-in username
requires_2faNoWhether 2FA is required

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure and does so effectively. It explains the session persistence ('The session remains authenticated for subsequent calls'), security handling ('Credentials are used only for this session and are not persisted'), and return format details. It doesn't mention rate limits or specific error conditions, preventing a perfect score.

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 clear sections (purpose, args, usage guidance, returns, behavioral notes). It's appropriately sized for a security-sensitive authentication tool, though the parameter section duplicates schema information, preventing a perfect score for conciseness.

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 an authentication tool with no annotations but with output schema, the description provides excellent contextual completeness. It covers purpose, usage guidance, parameter overview, return value details, session behavior, and security considerations. The presence of an output schema means the description doesn't need to fully document return values, and it effectively supplements the structured data.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already fully documents all three parameters. The description repeats the parameter information in the Args section but doesn't add meaningful semantic context beyond what's in the schema. This meets the baseline expectation when schema coverage is complete.

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 specific action ('Authenticate with USCardForum credentials') and distinguishes this authentication tool from its many sibling tools that perform read operations. It explicitly identifies the resource being accessed (forum credentials) and the verb (authenticate).

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 provides explicit guidance on when to use this tool ('Only use this if you need authenticated features like...') and when not to use it ('Most read operations work without authentication'). It clearly differentiates this authentication tool from the many read-only sibling tools listed.

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

search_forumA
Search USCardForum for topics and posts matching a query.

Args:
    query: Search query string. Supports Discourse operators:
        - Basic: "chase sapphire bonus"
        - In title only: "chase sapphire in:title"
        - By author: "@username chase"
        - In category: "category:credit-cards chase"
        - With tag: "#amex bonus"
        - Exact phrase: '"sign up bonus"'
        - Exclude: "chase -sapphire"
        - Time: "after:2024-01-01" or "before:2024-06-01"

    page: Page number for pagination (starts at 1)

    order: Sort order for results. Options:
        - "relevance": Best match (default)
        - "latest": Most recent first
        - "views": Most viewed
        - "likes": Most liked
        - "activity": Recent activity
        - "posts": Most replies

Returns a SearchResult object with:
- posts: List of matching SearchPost objects with excerpts
- topics: List of matching SearchTopic objects
- users: List of matching SearchUser objects
- grouped_search_result: Metadata about result counts

Example queries:
- "Chase Sapphire Reserve order:latest" - Recent CSR discussions
- "AMEX popup in:title" - Topics about AMEX popup in title
- "data point category:credit-cards" - Data points in CC category
- "@expert_user order:likes" - Most liked posts by a user

Pagination: If more results exist, increment page parameter.
ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query string. Supports operators: 'in:title', '@username', 'category:name', '#tag', 'after:date', 'before:date'
pageNoPage number for pagination (starts at 1)
orderNoSort order: 'relevance' (default), 'latest', 'views', 'likes', 'activity', or 'posts'

Output Schema

ParametersJSON Schema
NameRequiredDescription
postsNoMatching posts
usersNoMatching users
topicsNoMatching topics
grouped_search_resultNoResult metadata

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 carries the full burden and excels by disclosing key behavioral traits: it explains the search functionality, pagination behavior (increment page parameter if more results exist), and the structure of the return object. It also details query operators and sort options, which are critical for effective tool 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 and front-loaded, starting with the core purpose, followed by detailed parameter explanations, return value description, and practical examples. Every sentence adds value, such as the operator examples and pagination note, with no redundant or unnecessary information.

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 (search with operators and pagination), no annotations, and the presence of an output schema, the description is highly complete. It covers purpose, usage, parameters, return values, and behavioral aspects like pagination, leaving no gaps for an AI agent to understand and invoke the tool 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?

Despite 100% schema description coverage, the description adds significant value beyond the schema by providing detailed examples of query operators (e.g., 'in:title', '@username') and sort order options with practical use cases. It clarifies parameter interactions, such as how 'page' works with pagination, enhancing understanding beyond the basic schema definitions.

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 with a specific verb ('Search') and resource ('USCardForum for topics and posts'), distinguishing it from sibling tools like 'get_hot_topics' or 'get_new_topics' which retrieve predefined lists rather than performing custom searches. It explicitly mentions what is being searched (topics and posts) and matches the tool name directly.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool (searching with a query) and includes example queries that illustrate common use cases. However, it does not explicitly state when not to use it or name specific alternatives among sibling tools, such as using 'get_topic_info' for detailed topic information instead of search results.

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

subscribe_topicA
Set your notification level for a topic. REQUIRES AUTHENTICATION.

Args:
    topic_id: The topic ID to subscribe to
    level: Notification level:
        - 0: Muted (no notifications)
        - 1: Normal (only if mentioned)
        - 2: Tracking (notify on replies to your posts)
        - 3: Watching (notify on all new posts)

Must call login() first.

Returns a SubscriptionResult with:
- success: Whether subscription succeeded
- notification_level: The new notification level

Use to:
- Watch topics for all updates (level=3)
- Mute noisy topics (level=0)
- Track topics you've contributed to (level=2)
ParametersJSON Schema
NameRequiredDescriptionDefault
topic_idYesThe topic ID to subscribe to
levelNoNotification level: 0=muted, 1=normal, 2=tracking (default), 3=watching

Output Schema

ParametersJSON Schema
NameRequiredDescription
successYesWhether subscription succeeded
notification_levelNoNew notification level

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It successfully reveals key traits: authentication requirement ('REQUIRES AUTHENTICATION'), mutation nature (implied by 'Set'), and return format ('Returns a SubscriptionResult with...'). However, it doesn't mention potential side effects like rate limits or whether this affects other users' notifications.

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 and front-loaded: purpose first, then authentication requirement, followed by parameter details, prerequisites, return values, and usage examples. Every sentence serves a distinct purpose with zero wasted text. The bulleted lists improve readability without adding fluff.

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

Completeness5/5

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

Given the tool's moderate complexity (2 parameters, authentication requirement), the description provides complete context. It covers purpose, authentication, parameters, prerequisites, return values, and usage scenarios. With an output schema present, it appropriately doesn't over-explain return values. This is comprehensive for a subscription management tool.

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

Parameters4/5

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

Schema description coverage is 100%, so the schema already documents both parameters thoroughly. The description adds marginal value by restating the level enum meanings in a more readable format and emphasizing the default value context. This slightly enhances understanding beyond the schema's technical documentation.

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 starts with a clear verb+resource statement: 'Set your notification level for a topic.' It specifically distinguishes this tool from siblings like 'get_topic_info' or 'get_notifications' by focusing on subscription management rather than information retrieval. The purpose is immediately apparent and differentiated.

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 provides explicit usage guidance: 'Must call login() first' establishes a prerequisite, and the 'Use to:' section lists specific scenarios (watch topics, mute noisy topics, track contributions) with corresponding level values. This gives clear context for when to use this tool versus alternatives like 'get_notifications' for reading notifications.

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

TDQS

A4.1/5.0
Disambiguation4/5

Most tools have distinct purposes, such as get_topic_posts for paginated fetching and get_all_topic_posts for automatic pagination, but some overlap exists between get_user_replies and get_user_actions, which could cause confusion. Overall, descriptions clarify boundaries, but minor ambiguity remains in user activity tools.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with snake_case, such as get_topic_posts, search_forum, and bookmark_post. There are no deviations in naming conventions, making the set predictable and readable.

Tool Count3/5

With 22 tools, the count is borderline high for a forum server, as it includes many user-specific tools like get_user_followers and get_user_reactions that might be excessive. While comprehensive, it feels heavy and could overwhelm agents with overlapping user data retrieval.

Completeness5/5

The tool set provides complete coverage for forum operations, including authentication, topic and post retrieval, user profiling, notifications, bookmarks, and search. There are no obvious gaps; agents can perform full CRUD-like actions and navigate the forum effectively.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables AI agents to interact with Discourse forums through search, reading topics/posts, managing categories and users. Supports secure authentication and optional write operations with rate limiting.
    14
    3,156
    73
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables interaction with USCardForum, a Discourse-based community focused on US credit cards and points. Provides 22 tools for discovering topics, reading content, researching user profiles, and managing authenticated actions like notifications and bookmarks.
    22
    MIT
  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables interaction with USCardForum.com, a Discourse-based community for US credit cards and miles. Provides 22 tools for discovering topics, reading posts, researching user profiles, and managing authenticated actions like notifications and bookmarks.
  • A
    license
    A
    quality
    C
    maintenance
    Enables interaction with USCardForum, a Discourse-based community for US credit cards and points. Supports topic discovery, content reading, user research, forum search, and authenticated actions like notifications and bookmarks.
    22
    MIT

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/raidenrock/uscardforum-mcp'

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