USCardForum MCP Server
Provides comprehensive access to USCardForum, a Discourse-based community focused on US credit cards, points, and miles. Enables browsing hot/new/top topics, full-text search, reading topic posts with pagination, researching user profiles and activity, managing bookmarks and subscriptions, and accessing notifications for authenticated users.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@USCardForum MCP Servershow me the latest hot topics about Chase Sapphire cards"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 configInstallation
Using UV (Recommended)
# Clone the repository
git clone https://github.com/uscardforum/mcp-server.git
cd uscardforum
# Install with UV
uv sync
# Run the server
uv run uscardforumUsing 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
uscardforumConfiguration
Environment Variables
Variable | Default | Description |
|
| Transport mode: |
|
| HTTP server host (for |
|
| HTTP server port (for |
| (none) | Bearer token for MCP auth ( |
|
| Forum base URL |
|
| Request timeout in seconds |
| (none) | Auto-login username (optional) |
| (none) | Auto-login password (optional) |
Transport Modes
The server supports three transport modes:
stdio(default): Standard input/output, used by Cursor and Claude Desktopsse: Server-Sent Events over HTTPstreamable-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/mcpStreamable 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-tokenThis 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 Auto-Login
If both NITAN_USERNAME and NITAN_PASSWORD are set, the server automatically logs into the forum on startup. This enables authenticated features (notifications, bookmarks, subscriptions) without manual login.
Cursor IDE Integration
Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"uscardforum": {
"command": "uv",
"args": ["--directory", "/path/to/uscardforum", "run", "uscardforum"],
"env": {
"NITAN_USERNAME": "your_forum_username",
"NITAN_PASSWORD": "your_forum_password"
}
}
}
}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
{
"mcpServers": {
"uscardforum": {
"command": "uv",
"args": ["--directory", "/path/to/uscardforum", "run", "uscardforum"],
"env": {
"NITAN_USERNAME": "your_forum_username",
"NITAN_PASSWORD": "your_forum_password"
}
}
}
}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
# 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=1Railway
# 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 openRender
Connect your GitHub repository to Render
Create a new Web Service
Select Docker as the runtime
Set environment variables in the dashboard:
MCP_TRANSPORT=streamable-httpNITAN_TOKEN=your-secret-tokenNITAN_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 itFly.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 logsGoogle Cloud Run
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.yamlDigitalOcean 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 variablesKoyeb
# 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-tokenCloudflare Containers
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 -fDocker Hub: uscarddev/uscardforum-mcp
Available tags:
latest- Latest stable releasetagname- 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 |
|
| ā | Set to |
|
| HTTP server bind address | |
|
| HTTP server port (some platforms override this) | |
| Bearer token for MCP authentication | ||
|
| Forum base URL | |
|
| Request timeout in seconds | |
| Forum auto-login username | ||
| Forum auto-login password |
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/mcpRailway:
https://your-app.up.railway.app/mcpRender:
https://your-app.onrender.com/mcpFly.io:
https://your-app.fly.dev/mcpCloud Run:
https://your-app-xxxxx-uc.a.run.app/mcpDigitalOcean:
https://your-app.ondigitalocean.app/mcpKoyeb:
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-missingDomain 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: LikesUser 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 previewSearch 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 usersAuth 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 infoAPI Modules
The backend is split into focused API modules:
Module | Purpose |
| Topic lists, posts, pagination |
| Profiles, activity, badges, social |
| Full-text search |
| Category mappings |
| 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 |
|
| Currently trending topics by engagement |
|
| Latest topics by creation time |
|
| Top topics by period (daily/weekly/monthly/yearly) |
|
| Full-text search with operators |
|
| Category ID to name mapping |
š Reading ā Access Topic Content
Tool | Return Type | Description |
|
| Topic metadata (check post count first!) |
|
| Fetch ~20 posts starting at position |
|
| Fetch all posts with auto-pagination |
š¤ Users ā Profile & Activity Research
Tool | Return Type | Description |
|
| Profile overview and stats |
|
| Topics created by user |
|
| User's reply history |
|
| Full activity feed |
|
| Badges earned by user |
|
| Who the user follows |
|
| Who follows the user |
|
| Reactions given/received |
|
| Find users with specific badge |
š Auth ā Authenticated Actions (requires login)
Tool | Return Type | Description |
|
| Authenticate with forum credentials |
|
| Check authentication status |
|
| Fetch user notifications |
|
| Bookmark a post for later |
|
| Set topic notification level |
Available Prompts (4 Prompts, äøę)
Guided workflows for common research tasks:
Prompt | Args | Purpose |
|
| ē 究论åē¹å®äø»é¢ļ¼ę»ē»ē¤¾åŗå ±čÆ |
|
| åęēØę·čµęćč“”ē®ååÆäæ”åŗ¦ |
|
| ę„ę¾ēØę·ę„åēēå®ę°ę®ē¹ |
|
| ęÆč¾äø¤å¼ äæ”ēØå”ē社åŗč®Øč®ŗ |
Available Resources (3 Resources)
Quick-access static data:
URI | Description |
| Category ID ā name mapping (JSON) |
| Top 20 trending topics (JSON) |
| 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
Domain Models (
models/)Pydantic models for all return types
Strong typing and validation
Clear documentation
API Modules (
api/)Focused functionality per domain
Inherits from BaseAPI for HTTP
Returns domain models
Client (
client.py)Composes all API modules
Unified interface
Session management
MCP Server (
server.py)FastMCP tool definitions
Bearer token authentication
Extensive docstrings (Chinese)
Prompts and resources
Security
MCP Authentication: Bearer token via HTTP
Authorizationheader (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:
Fork the repository
Create a feature branch
Submit a pull request
Acknowledgments
Built with FastMCP
Domain models with Pydantic
Cloudflare bypass via cloudscraper
Discourse API documentation at docs.discourse.org
Available Tools
22 toolsbookmark_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.
| Name | Required | Description | Default |
|---|---|---|---|
| post_id | Yes | The numeric post ID to bookmark | |
| name | No | Label/name for the bookmark | |
| reminder_type | No | Reminder setting | |
| reminder_at | No | Reminder datetime (ISO format) | |
| auto_delete_preference | No | When to auto-delete: 0=never, 1=when reminder sent, 2=on click, 3=after 3 days (default) |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Bookmark ID |
| name | No | Bookmark label |
| reminder_at | No | Reminder time |
| bookmarkable_id | Yes | Bookmarked item ID |
| bookmarkable_type | No | Type of bookmarked item |
| auto_delete_preference | No | Auto-delete setting |
TDQS
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 authentication requirements, the mutation nature of the operation (bookmark creation), and the return format (Bookmark object). However, it doesn't mention potential side effects like duplicate bookmarks, error conditions, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with purpose statement, authentication requirement, parameter details, prerequisite, return value, and usage reinforcement. While slightly longer than minimal, every sentence adds value. The parameter explanations could be more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations but with output schema (implied by 'Returns a Bookmark object'), the description is mostly complete. It covers authentication, parameters, prerequisites, and return format. However, it lacks information about error conditions, idempotency, or what happens when bookmarking already-bookmarked posts.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the baseline is 3. The description adds significant value by explaining the auto_delete_preference parameter's enum values (0-3 with meanings) and clarifying that post_id is numeric. However, it doesn't provide additional context for reminder_type beyond what's in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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') and resource ('post for later reference'), distinguishing it from sibling tools which are primarily get/read operations. The final sentence reinforces the purpose by stating 'Use to save interesting posts for later reference.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool ('Must call login() first') and provides clear prerequisites (authentication requirement). It also distinguishes from sibling tools by being the only bookmarking/mutation tool among primarily read-only operations.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| topic_id | Yes | The numeric topic ID | |
| include_raw | No | Include markdown source (default: False) | |
| start_post_number | No | First post to fetch (default: 1) | |
| end_post_number | No | Last post to fetch (optional, fetches to end if not set) | |
| max_posts | No | Maximum number of posts to return (optional safety limit) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 behavioral traits. It explains the automatic pagination mechanism, provides safety guidance about response size limits for large topics, describes how parameters interact (start_post_number, end_post_number, max_posts), and references the return structure. The only minor gap is not explicitly mentioning whether this is a read-only operation, though 'fetch' implies it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections: purpose statement, parameter explanations, important notes, use cases, return information, and pro tip. While comprehensive, some redundancy exists (parameter descriptions partially repeat schema info). Every sentence adds value, but it could be slightly more concise by eliminating schema repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 interacting parameters) and the presence of an output schema (mentioned in 'Returns the same Post structure as get_topic_posts'), the description is complete. It covers purpose, usage guidelines, parameter semantics, behavioral traits, and references sibling tools appropriately. No significant gaps remain for agent understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 beyond the schema by explaining parameter interactions and practical usage: it shows how start_post_number, end_post_number, and max_posts work together, provides default behavior explanations, and gives concrete examples of parameter combinations in the use cases section. This goes well beyond what the schema descriptions provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Fetch all posts from a topic with automatic pagination.' It specifies the verb ('fetch'), resource ('posts from a topic'), and key behavioral trait ('automatic pagination'). It distinguishes from sibling 'get_topic_posts' by emphasizing comprehensive fetching with pagination handling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. It includes an 'IMPORTANT' section advising to use max_posts for large topics, mentions using 'get_topic_info first to check post_count before deciding whether to fetch all or paginate manually,' and gives four concrete use cases with parameter examples. It clearly differentiates from 'get_topic_posts' by handling pagination automatically.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| categories | No | ID to name mapping |
TDQS
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 the return type (CategoryMap object), the scope (all categories including main and subcategories), and practical applications. It does not mention potential limitations like rate limits or authentication needs, but covers core functionality adequately.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
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 explanatory context and use cases. Every sentence adds value without redundancy, and it efficiently conveys necessary information in a compact format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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, no annotations, but with an output schema), the description is complete. It explains what the tool does, what it returns, and how to use the output, compensating for the lack of annotations. The presence of an output schema means the description does not need to detail return values, and it adequately covers all relevant aspects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 the baseline is 4. The description adds no parameter-specific information, which is appropriate since no parameters exist, and instead focuses on output semantics and usage context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific verb ('Get') and resource ('mapping of all forum categories'), distinguishing it from sibling tools like get_topic_info or get_user_summary that focus on different resources. It explicitly defines what the tool returns (CategoryMap object) and its purpose (organizing topics by subject area).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 by listing specific use cases (filter search results, understand topic sections, navigate to areas of interest). However, it does not explicitly state when NOT to use it or name alternatives among sibling tools, such as using get_topic_info for topic-specific details instead.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| current_user | No | Logged-in user |
| is_authenticated | No | Whether authenticated |
TDQS
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 the tool returns session information and authentication status, which is useful behavioral context. However, it doesn't mention potential errors, rate limits, or other operational traits beyond the basic return structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, followed by details on the return object and usage guidance. Every sentence adds value without redundancy, making it efficiently structured and appropriately sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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, output schema exists), the description is mostly complete. It explains what the tool does and what it returns, but lacks details on error handling or edge cases, which holds it back from a perfect score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, and schema description coverage is 100%. The description doesn't need to add parameter semantics, so it meets the baseline of 4 for zero-parameter tools, as it appropriately focuses on output and usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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') with a specific verb and resource. It distinguishes itself from siblings by focusing on session/authentication status rather than user data, topics, or posts, though it doesn't explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for usage ('Use to verify authentication status'), which implicitly guides when to use it. However, it doesn't explicitly state when not to use it or name specific alternatives among the sibling tools.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination (0-indexed, default: 0) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 explaining ranking criteria ('engagement metrics like recent replies, views, and likes'), pagination behavior, and return format. It also includes example response interpretation for behavioral context, though it could mention 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, usage guidelines, args, returns, examples) and front-loaded key information. It could be slightly more concise by avoiding redundancy in the Args section, but overall it's efficient with zero waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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, the description is complete. It covers purpose, usage, parameters, return values, and behavioral interpretation, providing sufficient context for an AI agent to use the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so the baseline is 3. The description adds minimal value beyond the schema by restating the parameter in the Args section ('page: Page number for pagination (0-indexed)') but doesn't provide additional semantics like format details or usage nuances.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 ('currently trending/hot topics from USCardForum'), distinguishing it from siblings like get_new_topics or get_top_topics by specifying 'most actively discussed topics right now' based on engagement metrics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides three use cases ('See what the community is currently discussing', 'Find breaking news or time-sensitive opportunities', 'Discover popular ongoing discussions'), which guide when to use this tool versus alternatives like get_new_topics or get_top_topics.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination (0-indexed, default: 0) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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's a read operation (implied by 'fetch'), returns sorted results (newest first), explains that results may have fewer replies, and mentions pagination. It doesn't cover rate limits or authentication needs, but provides substantial behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with purpose first, then usage guidelines, parameters, return values, and a tip. Some redundancy exists (pagination info appears in both description and schema), but overall it's appropriately sized and front-loaded with essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (single optional parameter), no annotations, but with an output schema that documents return values, the description provides excellent contextual completeness. It covers purpose, usage, behavior, parameters, and includes helpful tips without needing to explain return values since the output schema handles that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 the single parameter. The description repeats the pagination information in the Args section but adds no additional semantic context beyond what's in the schema, meeting the baseline expectation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 over 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly provides usage scenarios ('Use this to:') with three specific examples (find 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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| since_id | No | Only get notifications newer than this ID | |
| only_unread | No | Only return unread notifications | |
| limit | No | Maximum number to return |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 via limit parameter, and filtering capabilities. It also describes the return format in detail. Could improve by mentioning rate limits or any destructive effects (though likely none for a fetch operation).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections: purpose statement, parameter documentation, prerequisite, return format, and use cases. Could be slightly more concise by integrating parameter details more efficiently, but overall information density is good with minimal waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (implied by the detailed return format description) and 100% schema coverage, the description provides excellent contextual completeness. It covers authentication requirements, parameter usage, return format, and specific use cases, making it fully sufficient for an agent to understand and use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 but doesn't add significant 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.
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 sibling tools like get_user_actions or get_user_replies which focus on different data types. It specifies retrieving notifications specifically, not other user data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 clear use cases: 'Check for new replies to your posts', 'See mentions and likes', 'Track topic updates you're watching'. This gives concrete guidance on 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
| Name | Required | Description | Default |
|---|---|---|---|
| topic_id | Yes | The numeric topic ID (from URLs like /t/slug/12345) |
Output Schema
| Name | Required | Description |
|---|---|---|
| title | No | Topic title |
| topic_id | Yes | Topic identifier |
| post_count | No | Total number of posts |
| last_posted_at | No | Last activity time |
| highest_post_number | No | Highest post number |
TDQS
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 behavioral traits such as the tool's role in pagination planning, decision-making for fetching posts, and handling of large topics with specific thresholds. However, it lacks details on error handling, rate limits, or authentication needs, which are common for API tools.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Args, Use this FIRST, Returns, Strategy), but it could be more concise by avoiding repetition (e.g., the topic_id explanation is duplicated in Args and schema). Most sentences earn their place by adding useful context, though some trimming is possible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (single parameter, no annotations, but with an output schema), the description is complete. It explains the purpose, usage, parameters, return values (with a TopicInfo object detailed), and strategic advice, compensating for the lack of annotations. The output schema means return values don't need further explanation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 parameter's origin ('from URLs like /t/slug/12345') and its purpose in the context of the tool's usage, but it doesn't provide additional syntax or format details beyond what the schema already covers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 ('Get metadata') and resource ('about a specific topic'), distinguishing it from siblings like 'get_topic_posts' or 'get_all_topic_posts' by emphasizing it fetches metadata without posts. It explicitly differentiates from alternatives by stating 'without fetching all posts'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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') and includes detailed strategies for different scenarios (e.g., 'Safe to fetch all at once' for <50 posts). It contrasts with siblings by implying this is a preliminary step before fetching posts, offering clear alternatives like pagination or batching.
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
| Name | Required | Description | Default |
|---|---|---|---|
| topic_id | Yes | The numeric topic ID | |
| post_number | No | Which post number to start from (default: 1 = first post) | |
| include_raw | No | Include raw markdown source (default: False, returns HTML) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 key behavioral traits: it specifies the batch size ('~20 posts per call'), describes the return format in detail, explains pagination behavior, and clarifies what happens when no posts are returned. It doesn't mention rate limits or authentication requirements, which keeps it from 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, parameters, returns, usage example) and front-loaded with the core functionality. While comprehensive, some information (like the detailed return fields) could be more concise, but every sentence serves a clear purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 a detailed output schema implied by the return description, the description is complete. It covers purpose, parameters, behavior, return format, and usage patterns, providing everything needed for an agent to use the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 repeats the parameter explanations in the 'Args' section but adds minimal value beyond what's in the schema. 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.
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 batch of posts from a topic') with the resource ('topic') and distinguishes it from siblings like 'get_all_topic_posts' by specifying pagination ('starting at a specific position'). The first sentence provides a complete verb+resource+scope statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool ('Use for paginated reading of topics') and provides a detailed pagination example with step-by-step instructions. It distinguishes from 'get_all_topic_posts' by emphasizing the batch/paginated nature versus presumably fetching all posts at once.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Time window for ranking: 'daily', 'weekly', 'monthly' (default), 'quarterly', or 'yearly' | monthly |
| page | No | Page number for pagination (0-indexed, default: 0) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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: the tool returns sorted results ('sorted by engagement score'), supports pagination ('Page number for pagination'), and returns structured data ('Returns TopicSummary objects'). However, it doesn't mention potential limitations like rate limits, authentication requirements, or data freshness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Args, Use this to, Returns, Example), uses bullet points efficiently, and every sentence adds value without redundancy. It's appropriately sized for a tool with 2 parameters and good behavioral context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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, 100% schema coverage, output schema exists), the description is complete. It covers purpose, usage guidelines, parameter semantics, return values, and includes examples. The existence of an output schema means the description doesn't need to detail return value structure, which it appropriately avoids.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 explaining the semantic meaning of period options (e.g., 'daily': Top topics from today, 'weekly': Top topics this week) and providing context for the page parameter ('Use page=1 to get more topics'), which goes beyond the schema's technical documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 specifying ranking based on performance over time periods rather than recency or popularity metrics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides usage scenarios ('Find the most valuable discussions', 'Research historically important threads', 'Identify evergreen popular content') and includes an example that distinguishes when to use different period values ('Use "yearly" to find the most impactful discussions, or "daily" to see what's trending today'), offering clear guidance on 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_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.
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes | The user's handle | |
| filter | No | Action type filter: 1=likes given, 2=likes received, 4=topics created, 5=replies posted, 6=all posts, 7=mentions | |
| offset | No | Pagination offset (0, 30, 60, ...) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 list of UserAction objects and mentions pagination via offset, which adds useful context. However, it lacks details on permissions, rate limits, error handling, or the structure of UserAction objects, leaving behavioral 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear purpose statement, parameter details in an 'Args' section, return information, and usage guidelines. It's front-loaded and efficient, though the bulleted list for filter values adds some length but is justified for clarity. Every sentence earns its place without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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, no annotations, but with an output schema), the description is fairly complete. It covers purpose, parameters, returns, and usage guidelines. The output schema likely defines UserAction objects, so the description doesn't need to detail return values. However, it could improve by addressing behavioral aspects like authentication or limits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 by listing common filter values in a bulleted format, but it doesn't provide additional semantics like edge cases or usage examples. 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.
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 siblings like get_user_replies or get_user_topics by emphasizing 'detailed activity analysis beyond just replies.' It provides a verb+resource+scope combination that is precise and differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides when to use this tool ('for detailed activity analysis beyond just replies') and when not to ('for most cases, get_user_replies or get_user_topics are simpler'), naming specific alternatives. This gives clear guidance on tool selection relative to siblings.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes | The user's handle | |
| grouped | No | Group badges by type (default: True) |
Output Schema
| Name | Required | Description |
|---|---|---|
| badges | No | Earned badges |
| badge_types | No | Badge type info |
TDQS
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 describes the return structure, but lacks details on behavioral traits like error handling, rate limits, authentication needs, or whether it's idempotent. The description adds some context about badge types but misses key operational aspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded with the core purpose. However, the 'Args' section repeats schema info unnecessarily, and the 'Badges indicate' and 'Use to assess' sections, while helpful, could be more integrated. It's efficient but has minor structural redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (2 parameters, 1 required), 100% schema coverage, and the presence of an output schema (implied by 'Returns a UserBadges object'), the description is mostly complete. It explains the purpose, usage context, and return structure, though it lacks behavioral details like error cases or performance considerations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 repeats the parameter info in the 'Args' section without adding meaning beyond the schema (e.g., explaining why grouping matters or format details). This meets the baseline of 3 when schema coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 from siblings like 'list_users_with_badge' (which lists users with a badge) by focusing on badges for a specific user, and from 'get_user_summary' by targeting badges specifically rather than 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.
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: 'to assess user experience and trustworthiness' based on badges indicating participation, community recognition, and special achievements. However, it does not explicitly state when not to use it or name alternatives (e.g., 'get_user_summary' for broader user info), which prevents a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_followersB
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.
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes | The user's handle | |
| page | No | Page number for pagination |
Output Schema
| Name | Required | Description |
|---|---|---|
| users | No | User list |
| total_count | No | Total users |
TDQS
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 mentions pagination and the return format, which adds useful context beyond basic functionality. However, it lacks details on rate limits, authentication needs, or error handling, leaving gaps for a mutation-free read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
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 and return details. The final sentence about follower count adds minor value but doesn't detract significantly, keeping it efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity, 100% schema coverage, and the presence of an output schema, the description is reasonably complete. It covers purpose, parameters, and returns adequately, though it could benefit from more behavioral context like error cases or pagination defaults.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 repeats the parameter info without adding meaningful context like format constraints or usage examples, earning the baseline score for adequate but redundant coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 ('list of users following a specific user'), making it easy to understand what it does. However, it doesn't explicitly differentiate from sibling tools like 'get_user_following' or 'get_user_summary', which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'get_user_following' (which might fetch users a person follows) or 'get_user_summary' (which might include follower info), leaving the agent without context for tool selection.
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
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes | The user's handle | |
| page | No | Page number for pagination |
Output Schema
| Name | Required | Description |
|---|---|---|
| users | No | User list |
| total_count | No | Total users |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It reveals pagination behavior through the 'page' parameter documentation and describes the return format (FollowList object structure). However, it doesn't mention rate limits, authentication requirements, error conditions, or whether this is a read-only operation (though 'fetch' implies reading).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, args, returns, use cases). It's appropriately sized at 6 sentences, though the 'Args:' section somewhat duplicates schema information. Most sentences earn their place by providing distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (implied by 'Returns a FollowList object'), the description doesn't need to fully explain return values. It provides adequate context for this read-only data retrieval tool, though it could benefit from mentioning authentication requirements or rate limits given no annotations are provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 in the 'Args:' section but doesn't add meaningful semantic context beyond what's in the schema (e.g., format expectations for username, pagination strategy details). 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.
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 'Fetch the list of users that a user follows' - a specific verb+resource combination. It distinguishes itself from sibling tools like get_user_followers (which would fetch followers rather than following), though it doesn't explicitly mention this distinction in the description itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Use to:' section provides clear context about when to use this tool ('Discover influential users', 'Find related experts', 'Map social connections'). However, it doesn't explicitly state when NOT to use it or mention specific alternatives among the sibling tools (like get_user_followers for the reverse relationship).
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.
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes | The user's handle | |
| offset | No | Pagination offset |
Output Schema
| Name | Required | Description |
|---|---|---|
| reactions | No | Reaction data |
TDQS
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 (implying read-only behavior) and mentions pagination via the 'offset' parameter, which adds useful context. However, it doesn't cover other behavioral aspects like rate limits, authentication needs, error conditions, or what 'UserReactions object' contains beyond 'reaction data'. The description adds some value but leaves gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded: the first sentence states the purpose clearly, followed by parameter and return value notes, then usage guidance. Each sentence adds value (e.g., explaining the purpose of fetching reactions). It could be slightly more structured (e.g., separating sections), but it's efficient with zero waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 is reasonably complete. It covers purpose, parameters, returns, and usage context. Since an output schema exists (implied by 'Returns a UserReactions object'), the description doesn't need to detail return values. However, with no annotations, it could better address behavioral aspects like error handling or data scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters ('username' and 'offset') well-documented in the schema. The description adds minimal semantics: it restates 'username' as 'The user's handle' and 'offset' as 'Pagination offset', which doesn't provide additional meaning beyond the schema. Since the schema does the heavy lifting, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Fetch a user's post reactions (likes, etc.)'. It specifies the verb (fetch) and resource (user's post reactions), making the function unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'get_user_actions' or 'get_user_replies', which might also involve user activity data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides some usage context: 'Use to see what content a user has reacted to, which can indicate their interests and values.' This implies when to use the tool (for analyzing user interests via reactions), but it doesn't explicitly state when not to use it or name alternatives among siblings (e.g., 'get_user_actions' for broader activity). The guidance is helpful but not comprehensive.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes | The user's handle | |
| offset | No | Pagination offset (0, 30, 60, ...) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 key behaviors: it describes pagination mechanics ('Paginate with offset in increments of 30'), specifies the return format (list of UserAction objects with fields), and implies read-only nature through 'Fetch'. It doesn't mention rate limits or auth needs, but covers essential operational details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and appropriately sized, with clear sections (purpose, args, returns, usage, pagination) and no wasted sentences. Each part adds value, such as explaining the return structure and providing usage examples, 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.
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 a list of UserAction objects'), the description is complete enough. It covers purpose, parameters, return values, usage scenarios, and pagination behavior, leaving no critical gaps for an AI agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 repeats parameter info (e.g., 'offset: Pagination offset (0, 30, 60, ...)') without adding significant meaning beyond the schema, such as explaining why increments of 30 are used or constraints on username format. Baseline 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 ('replies/posts made by a user in other topics'), distinguishing it from siblings like get_user_topics (user's own topics) and get_user_actions (broader actions). It precisely identifies what is being retrieved and from where.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context with 'Use this to:' examples (e.g., 'See a user's contributions across topics'), which helps understand when to apply this tool. However, it doesn't explicitly state when not to use it or name specific alternatives among siblings, such as get_user_actions, which might overlap in functionality.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes | The user's handle (case-insensitive) |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | Display name |
| stats | No | User statistics |
| badges | No | Recent badges |
| user_id | No | User ID |
| username | No | Username |
| created_at | No | Account creation date |
| top_topics | No | Top topics |
| top_replies | No | Top replies |
| last_seen_at | No | Last seen online |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that the tool returns a comprehensive summary object with specific fields, but doesn't mention behavioral aspects like rate limits, authentication requirements, error conditions, or whether this is a cached/real-time view.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections (Args, Returns, Use cases) and front-loaded purpose. Some sentences could be more concise (e.g., 'The summary provides a quick overview without fetching individual post histories' could be tightened), but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (Returns section details the structure) and 100% schema coverage for the single parameter, the description provides adequate context. It explains the tool's purpose, usage scenarios, and what information it provides, though could benefit from mentioning any limitations or prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 parameter's case-insensitive nature and providing context about what 'username' represents ('user's handle'), elevating it above the minimum viable level.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 comprehensive summary') and resource ('user's profile'), distinguishing it from sibling tools like get_user_badges or get_user_topics by emphasizing it provides a holistic overview rather than specific components.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool ('Evaluate a user's credibility and experience', 'Find their most valuable contributions', 'Understand their participation level') and when not to use it ('without fetching individual post histories'), providing clear alternatives to 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.
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes | The user's handle | |
| page | No | Page number for pagination |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses the pagination behavior ('Paginate by incrementing the page parameter') and the return format (list of topic objects with specific fields), but doesn't mention rate limits, authentication requirements, or error conditions that might be relevant for a user query tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections: purpose statement, args explanation, returns format, and usage guidelines. It's appropriately sized but could be slightly more concise by avoiding repetition of parameter descriptions already in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (implied by 'Returns a list of topic objects'), the description doesn't need to explain return values in detail. It provides good context about usage scenarios and pagination behavior, though it could benefit from mentioning authentication requirements or error handling for a user query tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 repeats the parameter explanations but doesn't add meaningful semantics beyond what's in the schema (e.g., format constraints for username, pagination strategy details). 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.
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 'topics created by a specific user', distinguishing it from siblings like get_user_replies or get_user_actions which focus on different user activities. It specifies the exact scope of what's being retrieved.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit use cases: 'See what discussions a user has initiated', 'Find expert users in specific areas', and 'Research a user's areas of interest'. It also mentions pagination guidance, though it doesn't explicitly contrast with alternatives like get_user_replies.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| badge_id | Yes | The numeric badge ID | |
| offset | No | Pagination offset |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 mentions pagination via 'offset' and returns 'a dictionary with user badge information', which adds some context beyond the schema. However, it lacks details on permissions, rate limits, or what specific information the dictionary contains, 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.
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 guidelines. Every sentence earns its place: the first states the action, the second and third explain parameters, the fourth describes returns, and the fifth provides usage context, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 output schema), the description is mostly complete. It covers purpose, parameters, returns, and usage, but lacks behavioral details like permissions or rate limits. The presence of an output schema reduces the need to explain return values, but more context 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.
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 repeats 'badge_id: The numeric badge ID' and 'offset: Pagination offset (optional)', adding no extra meaning beyond the schema. This meets the baseline of 3 when schema coverage is high, but no additional value is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and resource 'users who have earned a specific badge', making the purpose specific and actionable. It distinguishes from siblings like 'get_user_badges' (which gets badges for a user) by focusing on users for a badge, establishing clear differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage context: 'Use to find community members with specific achievements or recognition levels', which clearly indicates when this tool is appropriate. However, it does not specify when not to use it or name 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.
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes | Your forum username | |
| password | Yes | Your forum password | |
| second_factor_token | No | 2FA code if you have 2FA enabled |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message if failed |
| success | Yes | Whether login succeeded |
| username | No | Logged-in username |
| requires_2fa | No | Whether 2FA is required |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and delivers comprehensive behavioral information. 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'), return structure details, and authentication requirements including optional 2FA.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections (purpose, args, usage guidelines, returns, behavioral notes). Every sentence adds value, though the bulleted lists could be slightly more concise. The information is front-loaded with the core authentication purpose stated immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given this is a critical authentication tool with no annotations but with output schema, the description provides complete context. It covers purpose, parameters, usage scenarios, return values, session behavior, and security considerations - everything needed to understand and use this tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 meaningful context by explaining the optional nature of second_factor_token ('if you have 2FA enabled') and grouping all parameters under an 'Args:' section, which provides organizational value beyond the schema's individual parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 resource ('credentials'), distinguishing it from all sibling tools which are various read operations. It establishes this as the authentication entry point for the forum system.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('if you need authenticated features like: Reading notifications, Bookmarking posts, Subscribing to topics') and when not to use ('Most read operations work without authentication'). Provides clear alternatives by naming specific sibling tools that require authentication versus those that don't.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query string. Supports operators: 'in:title', '@username', 'category:name', '#tag', 'after:date', 'before:date' | |
| page | No | Page number for pagination (starts at 1) | |
| order | No | Sort order: 'relevance' (default), 'latest', 'views', 'likes', 'activity', or 'posts' |
Output Schema
| Name | Required | Description |
|---|---|---|
| posts | No | Matching posts |
| users | No | Matching users |
| topics | No | Matching topics |
| grouped_search_result | No | Result metadata |
TDQS
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 that the tool returns a SearchResult object with detailed components (posts, topics, users, metadata), describes pagination behavior ('If more results exist, increment page parameter'), and outlines the default sort order ('relevance'). It does not cover aspects like rate limits or authentication needs, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded, starting with a clear purpose statement, followed by organized sections for arguments, returns, examples, and pagination. Every sentence adds value, such as the detailed query examples and pagination instructions, with no redundant or unnecessary information, 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (search functionality with multiple parameters and operators), the description is complete. It fully explains the input parameters with examples, describes the output structure in detail (SearchResult object with nested components), and includes practical usage guidance. The presence of an output schema reduces the need to explain return values, but the description still adds valuable context, making it comprehensive for agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so the baseline is 3, but the description adds significant value beyond the schema. It elaborates on the 'query' parameter with detailed examples of Discourse operators (e.g., 'in:title', '@username'), provides a comprehensive list of 'order' options with explanations, and includes example queries that demonstrate parameter usage in context, enhancing understanding beyond the schema's basic descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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_topic_info' or 'get_hot_topics' which retrieve specific content rather than performing searches. It explicitly identifies what is being searched (topics and posts) and how (matching a query).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 practical applications. However, it does not explicitly state when not to use it or name alternatives among sibling tools, such as using 'get_hot_topics' for trending content without a specific query.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| topic_id | Yes | The topic ID to subscribe to | |
| level | No | Notification level: 0=muted, 1=normal, 2=tracking (default), 3=watching |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | Yes | Whether subscription succeeded |
| notification_level | No | New notification level |
TDQS
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 authentication requirement ('REQUIRES AUTHENTICATION'), the mutation nature of setting notification levels, and the return structure. However, it lacks details on error conditions, rate limits, or side effects like whether this affects other users.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
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 organized sections for arguments, prerequisites, returns, and usage examples. 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.
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, mutation operation), no annotations, but with an output schema, the description is complete. It covers authentication needs, parameter semantics, return values, and usage scenarios, providing sufficient context for an agent to invoke it correctly without relying on structured fields alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so the baseline is 3. The description adds value by explaining the semantic meaning of 'level' values with clear examples (0=muted, 1=normal, etc.) and use cases, which enhances understanding beyond the schema's technical definitions. It doesn't add much for 'topic_id' but compensates well for 'level'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Set your notification level for a topic') and resource ('topic'), distinguishing it from siblings like 'bookmark_post' or 'get_topic_info' which perform different operations on topics. It explicitly defines the verb and target, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 to: Watch topics for all updates, Mute noisy topics, Track topics you've contributed to') and includes prerequisites ('Must call login() first'). It also distinguishes usage scenarios by notification levels, though it doesn't explicitly name alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools have distinct purposes, but some overlap exists, such as get_user_replies and get_user_actions, which could cause confusion. However, descriptions clarify their differences, and tools like get_topic_posts and get_all_topic_posts are well-differentiated for pagination vs. bulk fetching.
All tool names follow a consistent verb_noun pattern, such as get_topic_posts, bookmark_post, and search_forum. The naming is uniform and predictable, making it easy for agents to understand the action and target resource.
With 22 tools, the count is slightly high but reasonable for a forum server covering categories, topics, posts, users, search, and authentication. It provides comprehensive functionality without being overwhelming, though some tools like get_user_actions and get_user_replies could potentially be consolidated.
The tool set offers complete coverage for a forum domain, including CRUD-like operations (e.g., login, bookmark, subscribe), extensive read capabilities (e.g., get topics, posts, users, categories), and search functionality. There are no obvious gaps, and agents can perform typical forum interactions without dead ends.
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
Search or monitor any Flarum-powered forum for discussions, replies, participants, dates, andā¦
Browse and manage Reddit posts, comments, and threads. Fetch user activity, explore hot/new/risingā¦
Carbon Voice MCP serves as a bridge that connects AI assistants like ChatGPT, Claude, and Cursor to a user's Carbon Voice account, turning voice messages and conversations into a private, on-demand knowledge base. It provides 28 specialized tools for comprehensive voice messaging management, including creating and sending messages, accessing conversation history with instant transcription, running AI actions (summarization, TLDR generation, meeting notes), and managing workspace collaboration through folders, contacts, and team communications.
Control your Discord community: send/read messages, manage channels and forums, and handle webhookā¦
Related MCP Servers
AlicenseAqualityCmaintenanceEnables 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.143,15673MIT- FlicenseNot gradedqualityNot gradedmaintenanceEnables 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.
- AlicenseAqualityCmaintenanceEnables 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.22MIT
- AlicenseAqualityCmaintenanceEnables interaction with USCardForum, a Discourse community focused on US credit cards and points, providing 22 tools for discovering topics, reading content, researching user profiles, and managing authenticated actions like notifications and bookmarks.22MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/hmumixaM/uscardforum-mcp4'
If you have feedback or need assistance with the MCP directory API, please join our Discord server