Skip to main content
Glama
SreeTarak2

DataFlow MCP Server

by SreeTarak2

DataFlow MCP Server - Production Grade

A secure, production-ready Model Context Protocol (MCP) server with MongoDB integration, featuring comprehensive security controls, CRUD operations, logging, and monitoring.

๐Ÿ“‹ Features

Security

  • โœ… Input Validation & Sanitization - Prevents NoSQL injection attacks

  • โœ… MongoDB SSL/TLS Support - Secure cloud deployments

  • โœ… Rate Limiting - Protects against abuse (100 req/min default)

  • โœ… Connection Pooling - Optimized for performance

  • โœ… Document Size Limits - Prevents resource exhaustion

  • โœ… Field Name Validation - Blacklists dangerous operators

Operations

  • โœ… CRUD Operations - Create, Read, Update, Delete documents

  • โœ… Filtering & Pagination - Flexible data retrieval with limits

  • โœ… Sorting Support - Sort by any field (ascending/descending)

  • โœ… Bulk Operations Ready - Extensible architecture

Monitoring & Observability

  • โœ… Comprehensive Logging - File & console with rotation

  • โœ… Health Checks - Service health status endpoint

  • โœ… Metrics Tracking - Request counts, success rates

  • โœ… Error Handling - Detailed error reporting

Production Ready

  • โœ… Security First - SSL/TLS support, input validation

  • โœ… Environment Config - 12-factor app ready

  • โœ… Graceful Shutdown - Proper resource cleanup

Related MCP server: Kroki MCP

๐Ÿš€ Quick Start

Prerequisites

  • Python 3.12+

  • Docker & Docker Compose (optional)

  • MongoDB (or use Docker Compose)

Local Development

  1. Clone and setup:

cd dataflow_mcp
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate
pip install -e .
  1. Configure environment:

cp .env.example .env
# Edit .env with your MongoDB connection
  1. Run the server:

python main.py

๐Ÿ“ก API Tools

Health Check

Get server status and metrics.

{
  "status": "healthy",
  "uptime_seconds": 123.45,
  "metrics": {
    "total_requests": 42,
    "successful_requests": 40,
    "failed_requests": 2,
    "success_rate": 95.24
  }
}

Read Collection

Retrieve documents with filtering, pagination, and sorting.

Parameters:

  • collection_name (required): Collection name

  • filter_query: JSON string with MongoDB filter

  • limit: Max documents (default: 100, max: 1000)

  • skip: Skip N documents (default: 0)

  • sort_by: Field to sort by

Example:

{
  "collection_name": "users",
  "filter_query": "{\"status\": \"active\"}",
  "limit": 10,
  "skip": 0,
  "sort_by": "created_at"
}

Get Document

Retrieve a single document by ID.

Parameters:

  • collection_name: Collection name

  • document_id: MongoDB ObjectId as string

Create Document

Create a new document in a collection.

Parameters:

  • collection_name: Collection name

  • document_json: JSON string representing the document

Example:

{
  "collection_name": "users",
  "document_json": "{\"name\": \"John\", \"email\": \"john@example.com\", \"status\": \"active\"}"
}

Update Document

Update an existing document.

Parameters:

  • collection_name: Collection name

  • document_id: MongoDB ObjectId as string

  • update_json: JSON with fields to update

Example:

{
  "collection_name": "users",
  "document_id": "65f8a1b2c3d4e5f6g7h8i9j0",
  "update_json": "{\"status\": \"inactive\", \"updated_at\": \"2024-01-01T12:00:00Z\"}"
}

Delete Document

Delete a document from a collection.

Parameters:

  • collection_name: Collection name

  • document_id: MongoDB ObjectId as string

๐Ÿ”’ Security Features

Input Validation

  • Collection names: Alphanumeric, dash, underscore only

  • Field names: Prevents dangerous operators ($where, $function, etc.)

  • Filters: Maximum 10KB, blacklist dangerous operations

  • Documents: Maximum 1MB, enforced size limits

MongoDB Security

  • Connection Options:

    • Connection pooling (default: 10 connections)

    • Retry writes enabled

    • Write concern: majority

    • Journaling enabled

    • SSL/TLS for cloud deployments

  • Environment Variables:

    MONGO_USE_TLS=true
    MONGO_CA_CERT_PATH=/path/to/ca.pem
    MONGO_ALLOW_INVALID_CERTS=false

Rate Limiting

  • 100 requests per 60 seconds (configurable)

  • Per-client tracking

  • Returns clear error on limit exceeded

Error Handling

  • Safe error messages (no sensitive data leaks)

  • Detailed internal logging

  • Graceful degradation

๐Ÿ“Š Environment Variables

Required

MONGO_URI=mongodb://user:password@host:port/database
MONGO_DB_NAME=dataflow

Optional (with defaults)

MONGO_TIMEOUT=5000              # Connection timeout (ms)
MONGO_POOL_SIZE=10              # Connection pool size
MONGO_MAX_IDLE_TIME=45000       # Max idle time (ms)
MONGO_USE_TLS=false             # Enable TLS
MONGO_CA_CERT_PATH=             # CA certificate path
LOGS_DIR=./logs                 # Log directory
LOG_LEVEL=INFO                  # Logging level

๐Ÿ“ Project Structure

dataflow_mcp/
โ”œโ”€โ”€ core.py            # FastMCP instance, rate limiter, metrics, prompt loading, normalization
โ”œโ”€โ”€ server.py          # tool registration + mcp.run()
โ”œโ”€โ”€ tools/
โ”‚   โ”œโ”€โ”€ health.py      # health_check, database_status
โ”‚   โ”œโ”€โ”€ crud.py        # generic MongoDB CRUD tools
โ”‚   โ”œโ”€โ”€ images.py      # contest banner pipeline (missing/broken images, cover prompts)
โ”‚   โ”œโ”€โ”€ migration.py   # v4.0 schema migration/backfill tools
โ”‚   โ”œโ”€โ”€ contests.py    # structuring + full generation + detail generation
โ”‚   โ”œโ”€โ”€ events.py      # events pipeline (fetch โ†’ structure โ†’ submit โ†’ query)
โ”‚   โ”œโ”€โ”€ raw_data.py    # raw scraped data bridge + overview
โ”‚   โ”œโ”€โ”€ validation.py  # chatbot-driven web validation pipeline
โ”‚   โ””โ”€โ”€ audit.py       # duplicate audit + discrepancy flagging
config/
โ”œโ”€โ”€ mongodb.py           # MongoDB connection with pooling
โ”œโ”€โ”€ security.py          # Validation and rate limiting
โ””โ”€โ”€ logging_config.py    # Logging setup
tools/                   # service layer (DataManager, generators, dedup gate, validators)
prompts/                 # prompt files (descriptive names + Prompts*.txt aliases)
main.py                  # thin entry point โ†’ dataflow_mcp.server
โ”œโ”€โ”€ pyproject.toml      # Dependencies and config (console script: dataflow-mcp)
โ””โ”€โ”€ .env.example        # Environment template

๐ŸŽช Events Pipeline

The MCP server includes a full events pipeline so AI chatbots can harvest and structure participatory events (conferences, summits, workshops, webinars, meetups, trainings, โ€ฆ):

1. get_records_for_events(source=..., limit=10)  โ†’ raw URLs + events-v1.1 prompt
2. [chatbot researches each URL and outputs event JSON]
3. submit_structured_events(events_json)         โ†’ persists to the Events collection
4. get_events(event_type=..., upcoming_only=true) โ†’ read structured events back
5. get_events_overview()                          โ†’ counts by type/status
6. get_events_for_detail_generation(batch_size=10) โ†’ events + event-details-v1.0.txt prompt
7. [chatbot researches and writes event details]
8. submit_event_details(event_id, details_json)  โ†’ versioned event_details saved
9. get_event_detail_status()                       โ†’ coverage metrics (remaining events to generate)

Event detail pages mirror the contest detail flow: EventDetailGenerator (tools/event_detail_generator.py) provides the priority queue, quality validation, and versioned event_details storage.

Prompt files were renamed to descriptive names (contest-structuring-v4.0.txt, event-structuring-v1.1.txt, โ€ฆ) with the old Prompts*.txt names kept as aliases. See TOOLS_REFERENCE.md for the full tool reference.

๐Ÿ”ง Configuration for Cloud Deployment

AWS Deployment

MONGO_URI=mongodb+srv://user:password@cluster.mongodb.net/dataflow
MONGO_USE_TLS=true
MONGO_ALLOW_INVALID_CERTS=false

Azure Deployment

MONGO_URI=mongodb://user:password@host.mongo.cosmos.azure.com:10255/database
MONGO_USE_TLS=true
MONGO_CA_CERT_PATH=/etc/ssl/certs/ca-certificates.crt

GCP Deployment

MONGO_URI=mongodb://user:password@instance:27017/database
MONGO_USE_TLS=true

๐Ÿšจ Production Checklist

  • MongoDB backups configured

  • SSL/TLS certificates installed

  • Environment variables set securely (not in code)

  • Logs redirected to centralized logging

  • Health checks configured in load balancer

  • Rate limits adjusted for your use case

  • MongoDB indexes optimized

  • Connection pool size tuned

  • Monitoring/alerting setup

  • Graceful shutdown tested

๐Ÿ“ˆ Performance Optimization

MongoDB Indexes

Pre-created indexes in scripts/mongo-init.js:

  • User email: unique constraint

  • Timestamps: for sorting and TTL

  • Status: for filtering

Connection Pooling

  • Default pool size: 10 (adjust via MONGO_POOL_SIZE)

  • Min connections: 2 (automatically maintained)

  • Max idle time: 45 seconds

Request Limits

  • Max filter size: 10KB

  • Max document size: 1MB

  • Max page size: 1000 documents

  • Rate limit: 100 req/min

๐Ÿงช Testing & Development

Install dev dependencies:

pip install -e ".[dev]"

Run tests:

pytest --cov=tools --cov=config

Code formatting:

black .
flake8 .
mypy .

๐Ÿ“ Logging

Logs are written to:

  • File: ./logs/mcp_server_YYYYMMDD.log (rotated daily, max 10MB)

  • Console: Real-time output

Log levels:

  • DEBUG - Detailed diagnostic info

  • INFO - General events

  • WARNING - Warning messages

  • ERROR - Error events

๐Ÿ› Troubleshooting

MongoDB Connection Failed

Check MONGO_URI and credentials
Verify MongoDB is running: mongosh "mongodb://..."
Check network connectivity and firewall

Rate Limit Exceeded

Default: 100 requests per 60 seconds
Increase MONGO_POOL_SIZE and optimize queries
Implement request queuing on client

High Memory Usage

Reduce MONGO_POOL_SIZE
Lower MONGO_MAX_IDLE_TIME
Check for large result sets (use pagination)

๐Ÿ“š References

๐Ÿ“„ License

MIT License - See LICENSE file for details

๐Ÿ‘ค Support

For issues and questions:

  1. Check troubleshooting section

  2. Review logs in ./logs/

  3. Check MongoDB connection

  4. Verify environment variables


Built for production-grade data operations with security-first design.

dataflow_mcp

Available Tools

41 tools
apply_migration_patchA

Apply a validated normalized patch to update a single contest.

All patches go through 4 validations before writing:

  1. Field whitelist โ€” only allowed fields may be patched

  2. Schema compliance โ€” types, enums, formats checked

  3. Destructive write protection โ€” populated fields not overwritten with null

  4. Cross-field consistency โ€” no contradictory values

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoIf True, bypass destructive write protection (use with caution)
contest_idYesMongoDB ObjectId of the contest (as string)
patch_jsonYesJSON string with fields to update

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It explicitly discloses the four-stage validation pipeline, including destructive write protection and field whitelisting, which goes beyond a generic 'update' description. It does not detail error handling or return values, but the output schema presumably covers that.

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

Conciseness5/5

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

The description is concise and front-loaded with the primary purpose, followed by a clear bulleted list of validation steps. Every sentence earns its place with no fluff or redundancy.

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

Completeness4/5

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

Given the tool's moderate complexity and absence of annotations, the description covers the critical behavioral context (validation pipeline, write protection). The existence of an output schema handles return values. It stops short of mentioning force's role explicitly or potential error conditions, but overall it is sufficiently complete for an agent to select and invoke the tool safely.

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

Parameters4/5

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

Although schema coverage is 100%, the description adds meaning by explaining that patch_json is subject to field whitelist, schema compliance, destructive write protection, and cross-field consistency checks. This helps an agent understand constraints on patch_json beyond the raw schema. The 'force' parameter is implicitly tied to the destructive write protection validation, adding contextual value.

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

Purpose5/5

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

The description opens with a specific verb+resource statement: 'Apply a validated normalized patch to update a single contest.' It clearly distinguishes this tool from siblings like bulk_apply_migrations (single vs. bulk) and update_document (contest-specific validation pipeline).

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

Usage Guidelines4/5

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

The description implies when to use this tool by emphasizing the validation pipeline and 'single contest' scope, which contrasts with bulk alternatives. It does not explicitly name alternatives or exclusions, but the context is clear enough for an agent to differentiate from update_document and bulk_apply_migrations.

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

bulk_apply_migrationsA

Apply multiple migration patches in one batch (with validation).

All patches go through 4 validations before writing.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoIf True, bypass destructive write protection for all patches
migrations_jsonYesJSON string containing array of migrations

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations provided, the description carries the full transparency burden. It discloses a key behavioral trait: all patches go through 4 validations before writing, which is valuable for a bulk operation. However, it omits details about failure handling, atomicity, or the presence of destructive write protection (mentioned only in the schema for 'force'), leaving gaps in behavioral disclosure.

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

Conciseness5/5

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

The description is concise and well-structured: the first sentence states the purpose, and the second adds a critical safety detail. There is no waste, and both sentences contribute meaningfully.

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

Completeness3/5

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

Given the tool's complexity (2 params, 1 required, output schema present), the description is minimally adequate but leaves gaps. It does not explain what happens if validations fail, whether the batch is atomic, or the implications of the 'force' bypass, which are important for a mutation tool of this nature.

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

Parameters3/5

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

Schema coverage is 100%, with both parameters ('migrations_json' and 'force') having descriptions in the input schema. The tool description does not add any extra meaning about parameters, focusing instead on the batch and validation aspects, so it stays at the baseline.

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

Purpose5/5

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

The description clearly states the tool's function: 'Apply multiple migration patches in one batch (with validation)'. The verb 'Apply' is specific, the resource is 'migration patches', and the batch scope distinguishes it from the sibling tool 'apply_migration_patch'.

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

Usage Guidelines4/5

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

The description provides clear context: use this for applying multiple migration patches in a batch, and the mention of validation implies a safety-conscious workflow. However, it does not explicitly name an alternative or state when not to use it, so it lacks a full exclusion.

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

create_documentB

Create a new document in a collection.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_jsonYesJSON string representing the document to create
collection_nameYesName of the collection

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description carries full responsibility for behavioral disclosure. It only states the core mutation action ('create') without revealing side effects, such as whether an existing document is overwritten, what happens if the collection does not exist, or any security or error considerations.

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

Conciseness5/5

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

The description is a single, concise sentence with no wasted words. It efficiently communicates the core purpose without unnecessary filler.

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

Completeness2/5

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

Although the parameters are fully covered by schema and an output schema exists, the description lacks essential context for an agent to invoke it correctly. It does not explain when to use create_document versus update_document, whether collections must exist, or any other operational prerequisites. Given the tool's simplicity and rich sibling set, this is a noticeable gap.

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

Parameters3/5

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

Schema description coverage is 100%, with both parameters (collection_name, document_json) clearly described. However, the tool description adds no additional meaning beyond the schema, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action 'Create' and the resource 'a new document in a collection.' This specific verb+resource pair distinguishes it from sibling tools like update_document, delete_document, and get_document.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, exclusions, or any sibling tools, leaving the agent without context for selecting this tool over others.

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

database_statusA

Check MongoDB connectivity separately from server health.

Returns: Database connection status and any connection error message

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of disclosing behavioral traits. It states the tool 'Check[s]' connectivity and returns database connection status plus any error message, implicitly indicating a read-only operation. It does not discuss side effects or permissions, but for a status-check tool, this level of disclosure is adequate.

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

Conciseness5/5

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

The description is brief and front-loaded, with the core purpose in the first sentence and return values clearly listed. Every word earns its place, with no fluff or repetition.

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

Completeness5/5

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

For a zero-parameter tool with an output schema, the description fully covers intent and return behavior. The complexity is low, and the description provides enough context without needing to explain return values in detail since an output schema exists.

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

Parameters4/5

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

The tool has zero parameters, so the baseline is 4. The description does not need to explain parameter semantics, and no additional param-related information is required.

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

Purpose5/5

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

The description clearly states the tool's function: 'Check MongoDB connectivity separately from server health.' It uses the specific verb 'Check' with the resource 'MongoDB connectivity', and explicitly distinguishes it from server health, which differentiates it from the sibling health_check tool.

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

Usage Guidelines4/5

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

The description provides clear context by noting this checks database connectivity 'separately from server health', implying it should be used when a MongoDB-specific status check is needed rather than a general health check. However, it does not explicitly name alternative tools or provide when-not-to-use guidance, so it falls just short of a 5.

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

delete_documentB

Delete a document from a collection.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesThe MongoDB object ID of the document to delete
collection_nameYesName of the collection

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It only says 'Delete', which is a basic action, but does not mention permanence, irreversibility, side effects, or permission requirements. This is minimal and adds little beyond the tool name.

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

Conciseness5/5

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

The description is a single, front-loaded sentence that is efficient and direct. It contains no fluff or redundancy, earning full marks for conciseness.

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

Completeness3/5

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

For a simple delete operation with fully documented parameters and an existing output schema, this description is adequate but not complete. It omits any caution about the permanent nature of deletion or potential consequences, which would be valuable for an agent. Still, given the simplicity, a score of 3 is reasonable.

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

Parameters3/5

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

Input schema coverage is 100%, with both parameters described in the schema. The description does not add any extra meaning about parameters, but the baseline is 3 given the high schema coverage. No additional clarification is necessary.

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

Purpose5/5

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

The description clearly states the action ('Delete') and the resource ('a document from a collection'). It distinguishes from sibling CRUD tools like create_document, update_document, and get_document, making its purpose unambiguous.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. The description does not mention scenarios for deletion or any exclusions (e.g., cannot delete if document is referenced elsewhere). This is a clear gap.

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

find_duplicate_contestsA

Read-only audit: find groups of LIVE contests that share the same normalized title (case/punctuation-insensitive, word-order-insensitive).

These are the records the duplicate-title gate would block on ingestion. Same-source exact-title duplicates are also shown here (they only update in place during ingestion, but if two records share a source + title the older one is effectively shadowed).

ParametersJSON Schema
NameRequiredDescriptionDefault
min_liveNoMinimum number of live records in a group to report (default 2). Archived contests are ignored.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden. It discloses the read-only nature, case/punctuation/word-order normalization, the LIVE-only scope, and the nuance of same-source exact-title duplicates and their shadowing effect. This goes well beyond the minimum and gives the agent a detailed behavioral model.

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

Conciseness5/5

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

The first sentence front-loads the core purpose and scope, while the second adds essential context about the duplicate gate and same-source shadowing without unnecessary fluff. Every sentence earns its place, and the overall length is appropriate for the tool's complexity.

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

Completeness5/5

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

For a single-parameter read-only audit tool, this description is comprehensive: it explains what it does, how matching works, the scope (LIVE only), and edge-case behavior (same-source shadowing). The output schema handles return structure, and the description adds necessary business context, making it complete.

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

Parameters3/5

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

The only parameter, min_live, is fully documented in the input schema with a description, default value, and the archived-ignored behavior. The description itself does not add any additional semantic context beyond what the schema already provides, so the baseline 3 for high schema coverage is appropriate.

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

Purpose5/5

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

The description opens with 'Read-only audit: find groups of LIVE contests that share the same normalized title', which clearly specifies the verb (find), resource (LIVE contests), and matching rule (normalized title). It distinguishes itself from sibling tools by focusing specifically on duplicate titles, a concept not present in any sibling name.

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

Usage Guidelines4/5

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

The description provides clear context for when to use the tool by explaining these are records the duplicate-title gate would block on ingestion, and it also clarifies that same-source exact-title duplicates are included with an explanation of shadowing. However, it does not explicitly name alternative tools or state when not to use it, so it stops short of a 5.

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

flag_contest_discrepancyA

Flag a factual discrepancy found in CONTEST DATA during AI research.

When a chatbot discovers a concrete, verifiable error in the Contests collection while doing research (e.g. the prize on the official page differs from what's stored), it can call this tool to save the finding to the flagged_discrepancies collection for human review.

This tool does NOT modify the Contests collection โ€” it only records the finding. A human should review and resolve via the appropriate pipeline (apply_migration_patch, etc.).

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceNoPipeline stage that detected it (e.g. "ai_detail_generation", "ai_validation")ai_detail_generation
contest_idYesThe MongoDB ObjectId of the contest with the issue
flagged_byNoIdentifier for the chatbot/AI that found it (e.g. "claude-1", "chatgpt-mistral")
discrepancies_jsonYesJSON string โ€” array of discrepancy objects. Each object: { "field": "prize.totalUSD", "currentValue": 50000, "observedValue": 10000, "sourceUrl": "https://...", "confidence": 0.95, "notes": "Official page clearly states $10,000" }

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It clearly discloses the non-modification of Contests and that it only records the finding. However, it does not mention whether the tool appends or overwrites existing flags, nor does it detail any return behavior beyond what an output schema might cover.

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

Conciseness5/5

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

The description is compact and well-structured. It opens with a one-sentence purpose, then gives context on when to use it, and closes with a critical behavioral note. Every sentence adds value without redundancy, making it easy to parse quickly.

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

Completeness5/5

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

Given the tool's simplicity and the presence of an output schema (indicated in context), the description fully covers what an agent needs: purpose, invocation context, side-effect clarification, and a pointer to subsequent human steps. No significant gaps remain.

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

Parameters3/5

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

Schema description coverage is 100%, with each parameter documented in the input schema. The main description does not add parameter-level meaning beyond the schema, so the baseline of 3 is appropriate. The schema's detailed example for discrepancies_json compensates well for any lack of description-level detail.

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

Purpose5/5

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

The description starts with a specific verb and resource: 'Flag a factual discrepancy found in CONTEST DATA during AI research.' It clearly distinguishes this tool from siblings like update_document or apply_migration_patch by stating it records findings to a separate collection and does not modify Contest data.

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

Usage Guidelines5/5

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

The description explicitly states the trigger condition: when a chatbot discovers a concrete, verifiable error during AI research. It also provides an exclusion ('This tool does NOT modify the Contests collection') and points to human review via other pipeline tools (apply_migration_patch, etc.), making usage boundaries clear.

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

generate_cover_prompt_for_contestA

Generate a premium image-generation prompt for one contest by ID.

This returns a single prompt string that can be fed into any image model when the original contest banner is missing.

ParametersJSON Schema
NameRequiredDescriptionDefault
contest_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It does disclose the key behavior: returns a single prompt string that can be fed into any image model. However, it does not explicitly state whether the tool modifies any data (it appears to be a pure read/generation operation) or describe error conditions, which would be helpful for full transparency.

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

Conciseness5/5

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

The description is very concise, with just two sentences. The first sentence immediately states the main action, and the second provides necessary context about the output and usage. No unnecessary words or repetition.

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

Completeness4/5

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

For a simple tool with one parameter and an output schema, the description covers the core purpose, return value, and usage context. It does not elaborate on error cases or prerequisites, but given the tool's simplicity, this is adequately complete.

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

Parameters3/5

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

The schema has 0% description coverage for contest_id, so the description must compensate. The phrase 'by ID' clarifies that the parameter is a single contest identifier, but it adds no additional detail about the ID's format or source. The parameter name is self-explanatory, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's function: 'Generate a premium image-generation prompt for one contest by ID.' It also specifies the output ('a single prompt string') and the use case ('when the original contest banner is missing'), which distinguishes it from sibling tools that list contests or verify URLs.

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

Usage Guidelines4/5

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

The description provides a clear condition for use: 'when the original contest banner is missing.' It does not explicitly mention when not to use the tool or name alternative tools, but the context is sufficiently specific for an agent to select it appropriately.

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

get_contests_for_detail_generationA

Return contests needing AI-generated detail pages, sorted by priority.

The response includes both the prompt text (contest-details-v1.0.txt) and the contest documents. Send both to Mistral so it can research and generate structured contest details.

Priority order: trending > open > high view velocity > recently added > prize value.

ParametersJSON Schema
NameRequiredDescriptionDefault
skipNoNumber of contests to skip (for pagination)
batch_sizeNoNumber of contests to return (default 11, max 50)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It adds useful context, such as the sorting priority order and that the response includes both the prompt text and contest documents. However, it does not explicitly state that the operation is read-only or idempotent, and it omits details about pagination behavior, though those are partially covered by the schema.

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

Conciseness5/5

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

The description is concise, front-loaded with the core purpose, and each sentence adds value. It efficiently conveys what the tool returns, the priority order, and the intended subsequent action (sending to Mistral). No fluff or redundant information is present.

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

Completeness5/5

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

Given the tool's simplicity (2 optional parameters, read-only operation) and the presence of an output schema, the description is complete. It explains the purpose, the content of the response, and the priority ordering, providing sufficient context for an agent to invoke the tool correctly and know what to do with the results.

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

Parameters3/5

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

The input schema already provides 100% coverage for both parameters (`skip` and `batch_size`) with their descriptions. The tool description adds no additional parameter-level semantics beyond implying a batch of contests is returned. Therefore, the baseline score of 3 is appropriate; the schema handles parameter explanation.

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

Purpose5/5

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

The description clearly states the tool's function: returning contests that need AI-generated detail pages, sorted by priority. It distinguishes this from sibling tools by focusing specifically on detail generation and mentioning the prompt text inclusion. The specific verb 'Return' and resource 'contests needing AI-generated detail pages' leave no ambiguity about the tool's purpose.

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

Usage Guidelines4/5

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

The description gives clear context for when to use this tool: to fetch contests along with the prompt text and documents for sending to Mistral for detail generation. However, it does not explicitly name alternative tools or state when not to use it, though the purpose is distinct enough among siblings.

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

get_contests_for_migrationA

Get a batch of existing contests that need migration to v4.0 schema.

Returns contests missing key fields like category, prizeSummary, or feeConfidence. Use pagination to process in batches.

ParametersJSON Schema
NameRequiredDescriptionDefault
skipNoNumber of documents to skip for pagination
batch_sizeNoNumber of contests to fetch (max 100)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses the selection behavior (contests missing category, prizeSummary, or feeConfidence) and pagination intent, but it does not explicitly state that the operation is read-only, nor does it mention potential empty results or error conditions. This is adequate but not deeply transparent.

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

Conciseness5/5

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

The description is two short sentences, immediately conveying the main purpose, followed by a clear explanation of the selection criteria and pagination. There is no extraneous information, and the structure is front-loaded with the core verb and object.

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

Completeness5/5

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

For a simple retrieval tool with two self-descriptive parameters and an output schema, the description sufficiently covers why to use it (migration), what it returns (contests missing fields), and how to process in batches. It is complete and leaves no significant gaps for the agent to guess.

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

Parameters3/5

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

The input schema already has 100% coverage with clear descriptions for skip and batch_size. The description adds only the general advice to use pagination, which does not significantly enhance the parameter semantics. Baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's purpose: getting a batch of existing contests needing migration to v4.0 schema. It specifies the resource (contests), the action (get), and the selection criteria (missing key fields), effectively distinguishing it from sibling tools like get_contests_missing_images or get_contests_for_detail_generation.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool: during migration to v4.0, specifically for contests missing key fields. It also advises using pagination for batch processing. However, it does not explicitly mention when NOT to use it or how it compares to alternative tools, though the unique scope is evident.

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

get_contests_missing_imagesA

Fetch contests where the primary image URL is missing or empty.

Use this to identify documents that need AI-generated replacement banners.

ParametersJSON Schema
NameRequiredDescriptionDefault
skipNo
batch_sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It communicates that the tool is read-only ('Fetch') and specifies the filter condition, which is helpful. However, it omits behavioral traits such as pagination semantics, how empty vs. null URLs are handled, and any performance implications from large result sets.

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

Conciseness5/5

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

The description is exactly two sentences. The first sentence states the core operation, and the second adds a purpose. Every word earns its place, with no filler or unnecessary detail.

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

Completeness4/5

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

The tool is simple, and an output schema exists, so return values need not be described. The description covers the core purpose and differentiates from a close sibling. However, the complete absence of parameter semantics in both description and schema lowers completeness slightly, though the parameter names are reasonably self-explanatory.

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

Parameters2/5

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

Schema description coverage is 0%, and the description does not mention skip or batch_size at all. The parameter names are conventional, but no additional meaning is added in prose. Given the low schema coverage, the description should have compensated by explaining what these parameters control.

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

Purpose5/5

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

The description uses the specific verb 'Fetch' with the resource 'contests where the primary image URL is missing or empty,' which clearly states the exact condition. It also differentiates from the sibling tool get_contests_with_broken_images by specifying 'missing or empty' rather than 'broken.' The added purpose context ('identify documents that need AI-generated replacement banners') further clarifies intent.

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

Usage Guidelines4/5

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

The description explicitly states a use case: 'Use this to identify documents that need AI-generated replacement banners.' This gives clear context for when to select this tool. It does not explicitly mention alternatives or when not to use it, but the purpose statement is sufficient for an agent to understand when it applies.

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

get_contests_with_broken_imagesA

Fetch contests whose image.primary.status is marked as 'broken'.

Returns the contests so the chatbot can display or re-generate banners.

ParametersJSON Schema
NameRequiredDescriptionDefault
skipNo
batch_sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden of behavioral disclosure. It indicates a read-only fetch operation and the return purpose, but does not mention pagination behavior (despite skip/batch_size params), authentication requirements, or other side effects. The word 'Fetch' implies read-only, providing a moderate level of transparency.

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

Conciseness5/5

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

The description consists of two concise sentences, front-loaded with the action and condition. Every sentence adds value without unnecessary filler, making it appropriately sized and well-structured.

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

Completeness4/5

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

Given the tool's simplicity and the presence of an output schema, the description sufficiently covers core behavior and purpose. It lacks parameter detail but is otherwise complete for this niche fetch operation, making it adequate for an agent to understand when and why to use it.

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

Parameters2/5

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

The input schema lists skip and batch_size with defaults but no descriptions, and the tool description does not explain these parameters in context. With 0% schema description coverage, the description fails to compensate for the missing parameter semantics, leaving the agent to infer their meaning.

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

Purpose5/5

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

The description clearly states the verb 'Fetch' and the targeted resource 'contests' with a specific filter condition ('image.primary.status is marked as broken'). This distinguishes it from sibling tools like get_contests_missing_images, which addresses a different condition.

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

Usage Guidelines4/5

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

It provides a clear context by explaining the intended use case: 'so the chatbot can display or re-generate banners'. While it does not explicitly mention alternatives or when not to use the tool, the specific condition implies a focused scenario, giving acceptable guidance.

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

get_documentB

Get a single document by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesThe MongoDB object ID of the document
collection_nameYesName of the collection

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It only says 'Get' which implies read, but doesn't disclose behavior for missing documents, error handling, permissions, rate limits, or return format. Minimal behavioral information is provided.

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

Conciseness5/5

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

One short sentence, front-loaded with the core action. No wasted words. It is concise and well-structured for a tool of this simplicity.

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

Completeness4/5

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

For a low-complexity tool with complete parameter schemas and an existing output schema, the description is nearly sufficient. It lacks guidance on edge cases or sibling comparisons, but the schema covers parameters and output, making it reasonably complete. Missing annotation context slightly reduces the score.

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

Parameters3/5

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

The tool description adds no parameter information beyond the input schema, which already has 100% coverage with descriptive definitions for document_id and collection_name. Baseline 3 applies; the description provides no additional meaning.

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

Purpose5/5

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

The description uses a specific verb ('Get') and resource ('document') with clear scoping ('by ID'), distinguishing it from collection-level reads like read_collection. It is unambiguous and tells the agent exactly what this tool does.

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

Usage Guidelines2/5

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

The description provides no when-to-use guidance or alternatives. It doesn't mention when to use this over read_collection or other get_* tools, nor when not to use it. The phrase 'single document by ID' implies usage, but no explicit guidance is given.

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

get_event_detail_statusA

Get coverage metrics for the event detail generation pipeline.

Surfaces EventDetailGenerator.get_status: how many live events exist in the Events collection, how many already have event_details documents (broken down by detail status), how many still need generation, and the overall coverage percentage.

Use this to see how much event-detail work remains before deciding how many batches of get_events_for_detail_generation to run.

Returns: Dictionary with total_events, total_with_details, total_without_details, by_status, and coverage_pct.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It details the computed metrics (live events, events with details by status, without details, coverage percentage) and lists the return dictionary fields. While it doesn't explicitly say 'read-only,' the status-oriented language and the verb 'get' imply no side effects. It could add a note on permissions or side effects, but the lack of such is not a major gap for a status tool.

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

Conciseness5/5

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

The description is concise and well-structured: a one-sentence purpose, a short explanatory paragraph, a usage line, and a Returns section. Every sentence earns its place, and the front-loaded main clause ensures quick comprehension.

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

Completeness5/5

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

For a simple status tool with no parameters and an output schema, the description is complete. It explains what the tool does, how to use it in a workflow, and what it returns. The output schema formalizes the return structure, so the description's explanation of the dictionary fields is sufficient and even redundant in a helpful way.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to add beyond what the schema already shows (an empty object). Per the baseline for 0 parameters, a score of 4 is appropriate; no further parameter explanation is needed.

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

Purpose5/5

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

The description opens with 'Get coverage metrics for the event detail generation pipeline,' clearly identifying the specific resource and the action. It distinguishes from sibling tools like get_events_for_detail_generation by focusing on status instead of fetching work items, making its purpose unambiguous.

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

Usage Guidelines5/5

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

It explicitly states when to use this tool: 'Use this to see how much event-detail work remains before deciding how many batches of get_events_for_detail_generation to run.' This names the alternative tool and provides clear decision context, satisfying the dimension fully.

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

get_eventsA

Read structured events from the Events collection with filters.

Use this to query events harvested by the pipeline โ€” e.g. all upcoming conferences, or everything in draft status awaiting review.

ParametersJSON Schema
NameRequiredDescriptionDefault
skipNoNumber of events to skip for pagination
limitNoMaximum events to return (max 100)
statusNoFilter by event status (published, draft, cancelled, archived)
event_typeNoFilter by events-v1.1 eventType (conference, summit, workshop, webinar, meetup, expo, trade_show, career_fair, networking_event, training_program, festival)
upcoming_onlyNoIf True, only return events whose eventDates.start is in the future

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It implies read-only behavior through the verb 'Read' and 'query', but does not disclose details like default pagination, ordering, or side effects. This is adequate but not rich.

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

Conciseness5/5

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

Two sentences with no redundancy. The first states the core function, the second gives actionable examples. Every word earns its place.

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

Completeness4/5

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

Given the schema covers all parameters and an output schema exists, the description is sufficient in conveying purpose and usage context. It could mention default behavior when no filters are applied, but this is a minor gap.

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

Parameters4/5

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

Schema coverage is 100%, which sets a baseline of 3. The description adds value by showing how filters combine in real scenarios (e.g., 'all upcoming conferences' maps to upcoming_only and event_type, 'draft status' maps to status), going beyond the isolated schema descriptions.

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

Purpose5/5

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

The description clearly states the tool reads structured events from the Events collection with filtering capabilities. It provides concrete examples (upcoming conferences, draft status) that make the purpose immediately understandable and distinguish it from write/update tools.

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

Usage Guidelines4/5

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

Explicitly recommends use for querying pipeline-harvested events and gives two practical use cases. However, it does not mention any alternatives or exclusions (e.g., when to use get_events_overview instead), so it misses the full criteria for a 5.

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

get_events_for_detail_generationA

Return events needing AI-generated detail pages, sorted by priority.

The response includes both the prompt text (event-details-v1.0.txt) and the event documents. Send both to the LLM so it can research and generate structured event details (whyAttend, whoShouldAttend, benefits, tips, agenda highlights, FAQ, SEO).

Priority order: upcoming > published > registration open > has speakers/ agenda > recently added.

ParametersJSON Schema
NameRequiredDescriptionDefault
skipNoNumber of events to skip (for pagination)
batch_sizeNoNumber of events to return (default 10, max 50)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses the response structure (prompt text + event documents) and the sorting priority order. As a read operation implied by 'get', no side effects are mentioned but none are expected. It lacks explicit read-only confirmation, but the name and content cover the essentials.

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

Conciseness5/5

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

The description is concise and well-structured: a one-sentence purpose, a note on the response payload with a usage instruction, and a clear priority order. Every sentence earns its place with no redundancy.

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

Completeness5/5

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

The tool has an output schema, so return values are documented. The description explains the selection criteria (priority order) and how to use the results (feed both prompt and events to LLM). This is complete for a retrieval tool with two simple parameters.

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

Parameters3/5

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

Schema description coverage is 100%, with both 'skip' and 'batch_size' fully described. The description adds no additional parameter meaning beyond what the schema already provides, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states a specific action: 'Return events needing AI-generated detail pages'. This distinguishes it from sibling tools like get_events (general listing) and get_contests_for_detail_generation (contests, not events). The priority order further clarifies the scope.

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

Usage Guidelines4/5

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

The description gives clear context: it is for fetching events that require AI-generated detail pages, and it instructs to send both prompt text and event documents to the LLM. It does not explicitly name alternatives or exclusions, but the use case is unambiguous.

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

get_events_overviewA

Get a quick overview of the Events collection.

Returns counts by eventType and status, plus the number of upcoming events. Use this to decide what to review or process next.

Returns: Dictionary with overview statistics.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses the return structure (a dictionary with counts by eventType/status and upcoming events) and the read-only, overview nature of the tool. While it doesn't mention permissions or edge cases, the simplicity of a zero-parameter overview tool makes this adequate.

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

Conciseness5/5

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

The description is concise and front-loaded: it states the purpose in the first sentence, then explains what is returned and offers a usage hint. The separate 'Returns' line is redundant but not wasteful. Every sentence earns its place.

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

Completeness5/5

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

For a zero-parameter tool with an output schema, the description fully covers the essential aspects: purpose, return content, and when to use it. It is complete and appropriately scoped to the tool's simplicity.

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

Parameters4/5

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

The tool has zero parameters, so the baseline is 4. The description adds no parameter details, but no parameters exist to explain. The schema is empty and additionalProperties is false, so there is nothing else to clarify.

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

Purpose5/5

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

The description clearly states the tool provides a 'quick overview of the Events collection' and specifies the exact breakdowns returned (counts by eventType/status, number of upcoming events). This distinguishes it from sibling tools like get_events or get_events_for_detail_generation, which focus on retrieving or processing event data rather than summarization.

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

Usage Guidelines4/5

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

The description gives a clear usage context: 'Use this to decide what to review or process next.' This tells the agent when to choose this tool for high-level assessment. However, it does not explicitly name alternatives or state when not to use it, so it falls short of a 5.

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

get_migration_statusA

Get overall migration progress statistics for the 810 contests.

Shows how many contests have been migrated to v4.0 schema, how many are pending, and what fields are missing.

Returns: Dictionary with migration progress and breakdown by field

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses the return type (dictionary with migration progress and field breakdown) but does not explicitly state that this is a read-only operation or mention any prerequisites. The behavior is mostly evident from the name, but the description adds only output details, not deeper behavioral context.

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

Conciseness5/5

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

The description is three short sentences, each contributing meaningful information: purpose, specific details, and return value. It is front-loaded with the main action and avoids redundancy or fluff.

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

Completeness5/5

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

Given the tool's simplicity (0 parameters, output schema exists, no nested objects), the description fully covers the necessary context. It explains what the tool does, what it reports, and what it returns, making it self-sufficient for an agent to select and invoke it.

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

Parameters4/5

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

The tool has zero parameters, and the schema coverage is 100% (empty object). Per the rubric, a description for a 0-parameter tool gets a baseline of 4, and no additional parameter explanation is needed. The description accurately reflects that no arguments are required.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Get overall migration progress statistics for the 810 contests.' It specifies exactly what it reports (migrated/pending/missing fields), which distinguishes it from sibling tools like get_contests_for_migration or apply_migration_patch.

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

Usage Guidelines3/5

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

Usage context is implied ('overall migration progress statistics' suggests use for high-level status), but the description does not explicitly mention when to use this tool instead of related siblings like get_contests_for_migration or database_status. No exclusions or alternatives are named.

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

get_prompted_contestsA

Return the prompt text together with contest documents for AI processing.

Use this when Claude or ChatGPT needs both the instructions and the raw MongoDB contests in a single response so it can normalize them locally.

ParametersJSON Schema
NameRequiredDescriptionDefault
skipNoNumber of contests to skip for pagination
batch_sizeNoContests to fetch (max 100)
prompt_nameNoPrompt file to bundle (default contest-backfill-v2.0.txt). Old alias name "Prompts-backfill.txt" is also accepted.contest-backfill-v3.2.txt

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description must carry the full burden. It implies a read-only operation through 'Return' and mentions the raw nature of the data, but does not explicitly state side-effect absence, rate limits, or payload size considerations. The use case is described, but deeper behavioral traits are not disclosed.

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

Conciseness5/5

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

The description is concise, two sentences total, with the purpose front-loaded in the first sentence and the use case in the second. Every sentence earns its place, with no redundant or verbose phrasing.

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

Completeness4/5

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

The description provides sufficient context for a simple retrieval tool, especially given that an output schema exists to explain return values and a fully documented input schema. However, it could mention that the tool is read-only or note likely large response sizes, but these are minor gaps given the overall clarity.

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

Parameters3/5

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

Schema description coverage is 100%, so parameters are well-documented. The description adds no specific parameter details beyond what the schema already provides, such as 'skip', 'batch_size', or 'prompt_name' defaults. The mention of 'prompt text' and 'contests' indirectly relates, but does not enhance parameter understanding.

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

Purpose5/5

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

The description clearly states the tool 'Return the prompt text together with contest documents for AI processing', using a specific verb and resource. It distinguishes itself from sibling tools by explicitly combining prompt text with raw MongoDB contests, which is a unique purpose.

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

Usage Guidelines4/5

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

The description provides an explicit when-to-use scenario: 'Use this when Claude or ChatGPT needs both the instructions and the raw MongoDB contests in a single response so it can normalize them locally.' It does not mention exclusions or alternatives, but gives clear context for appropriate use.

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

get_raw_data_statusA

Return a summary of what raw scraped data is available in CHRawdata.rawdata.

If source is provided (e.g. "contestwatchers", "opportunityDesk"), only records from that scraper are considered.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses the source filtering behavior but does not explicitly state that it is a read-only operation or mention any performance or side-effect characteristics. The phrase 'Return a summary' implies read-only, but more explicit disclosure would be better.

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

Conciseness5/5

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

Two sentences, front-loaded with the primary purpose, no redundant language. Every word earns its place.

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

Completeness4/5

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

The description is sufficient for a simple status tool with one optional parameter and an output schema. It covers purpose and parameter behavior. The output schema covers return structure, so the description does not need to list fields.

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

Parameters4/5

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

The schema has zero parameter descriptions, but the tool description thoroughly explains the `source` parameter, giving examples and explaining that it limits results to records from that scraper. This compensates well for the lack of schema-level documentation.

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

Purpose5/5

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

The description clearly states it returns a summary of raw scraped data in CHRawdata.rawdata, a specific resource, and mentions optional source filtering. This distinguishes it from other status tools like database_status.

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

Usage Guidelines4/5

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

The description establishes a clear context for use: checking what raw scraped data is available, optionally for a specific scraper. It does not explicitly name alternatives or exclusions, but the usage scenario is evident.

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

get_records_for_contest_validationA

Claim a batch of unvalidated contest documents and return them with a validation prompt for a chatbot.

Similar to get_records_for_validation but works on the Contests collection. Use this for Stage 2 validation before LLM normalization.

The chatbot uses its OWN web search to verify each contest's key fields (title, deadline, prize, eligibility) against the source page.

ParametersJSON Schema
NameRequiredDescriptionDefault
batch_sizeNoMax contests to claim (default 5, max 25)
chatbot_idNoIdentifier for the chatbot doing the validationdefault

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the burden of behavioral disclosure. The verb 'Claim' implies marking documents as claimed, but the description does not state whether this is a mutating operation, if it is reversible, or what happens to unclaimed records. It only mentions that the chatbot uses its own web search, leaving significant ambiguity about side effects.

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

Conciseness5/5

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

The description is three sentences, each serving a distinct purpose: core function, sibling differentiation, and behavioral context. It is tightly written with no filler, front-loading the primary action.

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

Completeness4/5

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

The tool has an output schema and simple two-parameter input, and the description explains the purpose, usage stage, and verification approach. However, it omits important side-effect details of the 'claim' operation, such as whether claiming prevents other agents from accessing these records and what happens in case of failure. Given the output schema, this is acceptable but not perfect.

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

Parameters3/5

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

Both parameters are fully described in the schema (100% coverage), including defaults and maximums, so the description adds little beyond what the schema provides. The mention of the chatbot's own web search contextually relates to chatbot_id but does not add extra semantics. Baseline 3 is appropriate when the schema fully documents parameters.

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

Purpose5/5

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

The description clearly states it 'Claim a batch of unvalidated contest documents and return them with a validation prompt,' using a specific verb and resource. It distinguishes itself from get_records_for_validation by specifying it works on the Contests collection.

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

Usage Guidelines4/5

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

The description provides explicit usage context: 'Use this for Stage 2 validation before LLM normalization' and mentions similarity to get_records_for_validation while targeting the Contests collection. This gives clear when-to-use guidance, though it does not explicitly list exclusions for alternative tools.

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

get_records_for_eventsA

Fetch raw records + the Events prompt (event-structuring-v1.1.txt, events-v1.1 schema) so a chatbot can structure participatory events (conferences, workshops, meetups, webinars, summits, trainings).

Use this when you want to go from raw event URLs/titles to a structured event document in one AI round-trip. The chatbot should:

  1. Read the event prompt_text (events-v1.1 schema and rules)

  2. For each record, pin the target event (name, edition, location, domain) and hunt the official site's subpages (speakers, agenda, pricing, venue)

  3. Extract fields following the events-v1.1 schema

  4. Return ONE event JSON per record via submit_structured_events

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum raw records to fetch (default 10, max 25).
sourceNoFilter by scraper source field (e.g. "women_opportunities_aug_2026"). If None, all records in the collection.
collection_nameNoRaw DB collection to read from. Defaults to "raw_urls" (the collection of URLs harvested from the women-opportunities text file); pass the pipeline collection name to reuse aggregation.raw_urls

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses the fetch operation and the workflow, and implies read-only behavior, but does not explicitly state side effects, rate limits, or constraints beyond what the schema covers.

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

Conciseness4/5

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

The description is moderately concise, with a clear first sentence and a numbered workflow. The step-by-step instructions add value but could be tightened.

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

Completeness4/5

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

Given the output schema exists and the description provides a full workflow with the expected interaction with submit_structured_events, it is quite complete. It could mention the limit on records, but that's in the schema.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all three parameters with descriptions. The tool description does not add any parameter-specific meaning, but it does not need to.

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

Purpose5/5

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

The description clearly states the tool fetches raw records plus an events structuring prompt, using specific verbs and resources. It distinguishes itself from siblings by focusing on participatory events and the events-v1.1 schema.

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

Usage Guidelines4/5

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

It explicitly states 'Use this when you want to go from raw event URLs/titles to a structured event document in one AI round-trip' and provides a step-by-step workflow. It does not explicitly name alternative tools or when not to use it, but the context is sufficient.

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

get_records_for_full_generationA

Fetch raw scraped records + BOTH prompts (contest-structuring-v4.0.txt + contest-details-v1.0.txt) so a chatbot can structure AND generate contest details in one pass.

Use this when you want to go from raw scraped data to published contest details in a single AI round-trip. The chatbot should:

  1. Read BOTH prompt texts (structuring schema + detail generation rules)

  2. For each record, use its URL (or title) to search the web and find the actual contest page

  3. Extract structured fields following the v4.0 schema

  4. Research and generate contest details following contest-details-v1.0.txt

  5. Return both via submit_full_generation

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum raw records to fetch (default 3, max 10)
sourceNoFilter by scraper source (e.g. "contestwatchers"). If None, all sources.
require_validatedNoIf True, only fetch records with validationStatus="validated"

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses the multi-step workflow (reading prompts, searching the web, extracting, researching, generating) and the intended follow-up via submit_full_generation. However, it doesn't mention potential side effects, rate limits, or external network dependencies explicitly, so it's not a 5.

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

Conciseness4/5

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

The description is longer than minimal, but the numbered list structures the workflow clearly and every sentence contributes to understanding how to use the tool. A bit verbose but not redundant.

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

Completeness4/5

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

Given the tool's complexity and that an output schema exists, the description adequately covers the overall process, expected inputs, and the next step. It could mention error scenarios or prerequisites more explicitly, but it's complete enough for a capable agent.

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

Parameters3/5

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

Schema description coverage is 100%, so each parameter is already well-documented. The description adds workflow context but doesn't add new parameter-specific semantics beyond what the schema provides. Baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb ('Fetch') and resource ('raw scraped records + BOTH prompts') and clearly distinguishes this tool from siblings by combining structuring and detail generation in one pass. It also names the exact prompt files involved, making the purpose unmistakable.

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

Usage Guidelines4/5

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

It explicitly says to use this when a single AI round-trip from raw data to published contest details is desired. It doesn't name alternative sibling tools (e.g., get_records_for_structuring) but implies them by contrast, so clear context is provided without explicit exclusions.

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

get_records_for_structuringA

Fetch raw scraped records + the structuring prompt (contest-structuring-v4.0.txt, v4.0 schema) so a chatbot can structure them into the normalized Contests format.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum raw records to fetch (default 5, max 20)
sourceNoFilter by scraper source (e.g. "contestwatchers"). If None, all sources.
require_validatedNoIf True, only fetch records with validationStatus="validated"

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden. It states that it fetches raw records and the prompt, implying a read-only operation. However, it does not mention side effects, authorization, or record readiness for structuring, so some behavioral gaps remain.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no fluff. It packs the key elements: action, resource, prompt version, schema version, and target format.

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

Completeness4/5

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

The description covers the essential purpose and identifiers (prompt version, schema, output format). With an output schema present, return values are already defined elsewhere. It could improve by noting when to use this over sibling tools, but it is otherwise complete for a fetch operation.

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

Parameters3/5

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

Schema coverage is 100%, so parameters are fully described in the schema. The description adds no additional parameter-specific context, thus the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb ('Fetch') and clearly identifies the resources ('raw scraped records + the structuring prompt'). It differentiates from siblings by mentioning the exact prompt file and 'normalized Contests format', making it distinct from event/validation/similar tools.

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

Usage Guidelines4/5

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

The description provides clear context: this is for structuring records into the Contests format. It implies use for structuring workflows but does not explicitly list alternatives or when-not conditions, so it falls just short of a 5.

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

get_records_for_validationA

Claim a batch of unvalidated raw records and return them with a validation prompt for a chatbot.

The chatbot uses its OWN web search capability to verify each record by visiting the source URL or searching the web for the contest title.

Records are atomically marked as 'in_progress' for this chatbot_id, preventing other chatbots from claiming the same records.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax records to claim (default 5, max 25)
sourceYesScraper source name (e.g. "contestwatchers", "opportunityDesk")
chatbot_idNoIdentifier for the chatbot doing the validation. Use different IDs ("claude-1", "gpt-4", etc.) for parallel processing across multiple chatbots.default

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries full responsibility. It discloses the key side effect: records are atomically marked as 'in_progress' for the given chatbot_id, preventing others from claiming them. It also explains that the returned records are meant for a chatbot with its own web search capability. This covers the most important behavioral trait (state change) beyond what annotations might provide.

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

Conciseness4/5

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

The description is three sentences and about 50 words. It is front-loaded with the core action and efficiently explains the purpose and side effects. The second sentence about the chatbot's web search is useful context, though slightly tangential to the tool's own behavior, but every sentence earns its place.

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

Completeness4/5

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

Given the presence of an output schema (which likely describes returned records and the validation prompt), the description need not explain return values. It adequately covers the claiming behavior, the atomic state change, and the intended workflow. It could mention edge cases like what happens when no records are available, but that is not a major gap.

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

Parameters3/5

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

The input schema covers 100% of parameters with descriptions, so the baseline is 3. The description doesn't add much parameter-specific detail beyond the schema, except that records are marked for the given chatbot_id, which aligns with the schema's note about using different IDs for parallel processing. This is marginal added value.

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

Purpose5/5

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

The description clearly states the tool claims a batch of unvalidated raw records and returns them with a validation prompt. It uses a specific verb ('claim') and resource ('raw records'), and distinguishes from sibling tools like get_records_for_structuring by focusing on validation for a chatbot.

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

Usage Guidelines4/5

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

The description provides clear context for when to use (for chatbot validation via web search, claiming unvalidated records) and mentions the atomic in_progress marking to prevent duplicate claims. It implicitly distinguishes from alternatives for other workflows (structuring, events), but doesn't explicitly name alternatives or say when not to use.

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

get_scraped_overviewA

Get a quick, actionable overview of what raw scraped records are available.

Use this to see what's in the pipeline before deciding which source to work on. Returns counts by source, validation status breakdown, total records, newest/oldest record dates, and a few sample titles.

This is designed for AI agents (ChatGPT, Mistral, Claude) to quickly understand what data is available and decide what to work on next.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceNoOptional scraper source to filter by (e.g. "contestwatchers", "opportunityDesk")

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses the return contents (counts, validation status, dates, sample titles) and positions it as 'quick' and 'actionable,' but it does not mention potential edge cases, performance implications, or whether any filtering is applied beyond the optional source parameter. This is adequate but not deep.

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

Conciseness5/5

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

Three sentences, front-loaded with the main purpose, followed by use context and return details. Every sentence adds value; no filler or redundancy.

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

Completeness4/5

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

Given an output schema exists, the description doesn't need to enumerate return values in detail, but it does anyway, which is helpful. It gives enough context for an agent to decide when to invoke it among many siblings, though it doesn't contrast with alternatives. This is slightly above the minimum.

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

Parameters3/5

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

Schema description coverage is 100% and covers the optional 'source' parameter with examples, so the description does not need to add parameter meaning. The description doesn't mention the parameter at all, but the schema handles it, warranting the baseline score of 3.

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

Purpose5/5

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

Description opens with a specific verb+resource: 'Get a quick, actionable overview of what raw scraped records are available.' It clearly distinguishes itself from siblings like get_raw_data_status by focusing on the overview of raw scraped records, and lists exactly what the overview contains.

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

Usage Guidelines4/5

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

Explicitly states when to use it: 'Use this to see what's in the pipeline before deciding which source to work on.' This provides clear context, though it does not name alternative tools or exclusion criteria, so it falls short of a 5.

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

get_validation_promptA

Preview the validation prompt without claiming any records.

Use this to see the instructions that will be sent to the chatbot before starting the validation workflow.

ParametersJSON Schema
NameRequiredDescriptionDefault
record_typeNo"raw" for raw data validation prompt, "contest" for contest validation promptraw

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It explicitly states 'without claiming any records,' implying a safe, read-only operation, and clarifies that it previews instructions. This adds meaningful context beyond the schema.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the primary purpose and key behavior. Every word earns its place; there is no redundancy or extraneous detail.

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

Completeness5/5

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

The tool is simple: one optional parameter fully documented in schema, and an output schema exists. The description explains what it does, its non-mutating behavior, and when to use it, leaving no significant gaps.

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

Parameters3/5

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

Schema description coverage is 100%, fully documenting the two allowed values ('raw' and 'contest'). The tool description does not add parameter details, but the schema carries the load, so a baseline of 3 is appropriate.

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

Purpose5/5

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

The description states 'Preview the validation prompt without claiming any records,' which clearly identifies the verb (preview) and resource (validation prompt). It also distinguishes from sibling validation/submission tools by explicitly noting it does not claim records.

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

Usage Guidelines4/5

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

The description says 'Use this to see the instructions that will be sent to the chatbot before starting the validation workflow,' providing clear context for when to invoke the tool. However, it does not explicitly name alternative tools or state when not to use it.

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

get_validation_statusA

Get an overview of the validation pipeline status.

Shows how many raw records are pending, in progress, validated, failed, or skipped โ€” broken down by source if specified.

Use this to monitor progress across multiple chatbots and decide when to run process_raw_data.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceNoOptional scraper source to filter by

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

No annotations are provided, so the description must carry the full burden. It describes the output shape (counts by status) and the optional source filter. The verbs 'Get' and 'Shows' imply a read-only operation, but it does not explicitly state that no data is modified or discuss performance/data freshness. For a status-monitoring tool, this is mostly sufficient.

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

Conciseness5/5

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

Three sentences: purpose, output details, and usage guidance. Every sentence earns its place, the key verb is front-loaded, and there is no redundant or vague wording.

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

Completeness5/5

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

For a tool with one optional parameter and an output schema, the description fully explains what the tool does, what data it presents, and when to use it. It names the decision action (process_raw_data), making it complete for the tool's complexity.

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

Parameters4/5

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

The schema describes the single parameter 'source' with 100% coverage ('Optional scraper source to filter by'). The description adds that results are 'broken down by source if specified', giving extra semantic meaning about the grouping behavior that goes beyond the schema.

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

Purpose5/5

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

The description opens with 'Get an overview of the validation pipeline status,' using a specific verb and resource. It enumerates the exact status categories shown (pending, in progress, validated, failed, skipped) and mentions source-based breakdown, clearly distinguishing it from sibling tools like get_raw_data_status or get_records_for_validation.

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

Usage Guidelines5/5

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

The final sentence explicitly says 'Use this to monitor progress across multiple chatbots and decide when to run process_raw_data.' This provides a clear use case, ties to a sibling tool, and offers actionable guidance on when to invoke this tool.

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

health_checkA

Check the health status of the MCP server process.

Returns: Dictionary with health status and metrics

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses the return type (Dictionary with health status and metrics) which adds useful context beyond the input schema, but it doesn't specify details like required permissions, side effects (or lack thereof), or the semantics of 'health status' beyond generic metrics.

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

Conciseness5/5

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

The description is two concise sentences, front-loaded with the purpose and followed by the return value. Every word earns its place with no redundancy or filler.

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

Completeness5/5

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

Given the tool's simplicity (no parameters, output schema present), the description is sufficient. It states the action and the return shape, which is complete for a health-check tool even though it doesn't enumerate every possible metric.

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

Parameters4/5

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

The tool has zero parameters and schema coverage is 100%, so there is no parameter detail needed. Per the baseline for zero-parameter tools, the description does not need to compensate, and the description doesn't mislead.

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

Purpose5/5

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

The description clearly states the tool 'Check the health status of the MCP server process.' It uses a specific verb and resource, and the mention of 'MCP server process' distinguishes it from sibling tools like database_status.

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

Usage Guidelines3/5

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

The description implies usage as a health check but gives no explicit guidance on when to use this tool versus alternatives such as database_status. There are no exclusions or alternative tool references, so context is only implicit.

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

process_raw_dataA

Read validated raw records from CHRawdata.rawdata for a given scraper source, normalize, deduplicate, and upsert them into the primary Contests collection (ContestHopperDb).

NOTE: By default, only records with validationStatus="validated" are processed. Run get_records_for_validation + submit_raw_validation first.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax records to process per call (default 100, max 1000)
sourceYesScraper name (e.g. "contestwatchers", "opportunityDesk")
auto_imageNoIf True, automatically download, convert (WebP+AVIF), and upload images to R2 after upserting contest data
dedupe_gateNoIf True (default), skip records whose title matches an existing live contest (normalized-title match from a different source, or reworded title from the same source). Set False to force-insert.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of disclosing behavior. It mentions the read-normalize-deduplicate-upsert flow and the validation gate, but does not explain the side effects of upserting (e.g., overwriting existing records), permissions required, idempotency, or failure behavior. This leaves meaningful gaps for a mutating operation.

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

Conciseness5/5

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

The description is two sentences plus a note, front-loaded with the core action and resource. Every sentence earns its place: the first states the operation, the second provides a critical default and prerequisite. No fluff.

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

Completeness4/5

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

The description is complete for a batch-ingestion tool: it names inputs, outputs, and workflow order. The output schema exists, so return-value documentation is not required. The only missing context is around operational safety (e.g., reversibility, potential data loss) and error handling, but these are not essential for an agent to invoke the tool correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all four parameters. The description adds only mild context (e.g., that `source` is a scraper name and that upsert happens), but does not materially enhance parameter understanding beyond the schema.

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

Purpose5/5

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

The description clearly states the tool reads validated raw records, normalizes, deduplicates, and upserts them into a specific collection (ContestHopperDb). It names the source table (CHRawdata.rawdata) and the target, distinguishing it from the many sibling tools that deal with validation or other processing steps.

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

Usage Guidelines5/5

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

The description explicitly says to run get_records_for_validation + submit_raw_validation first, providing a clear prerequisite. It also notes the default behavior of only processing records with validationStatus='validated', which tells the agent when this tool is appropriate.

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

read_collectionB

Read documents from a MongoDB collection with filtering and pagination.

ParametersJSON Schema
NameRequiredDescriptionDefault
skipNoNumber of documents to skip for pagination
limitNoMaximum number of documents to return (max 1000)
sort_byNoField name to sort by (optional)
filter_queryNoJSON string with MongoDB filter query (optional)
collection_nameYesName of the collection to read from

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It only says 'Read documents' which implies read-only, but it does not explicitly state that it does not modify data, nor does it disclose behavior like error handling, collection existence requirements, or performance implications. The mention of filtering and pagination is already evident from the schema and adds little beyond it.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no wasted words. It efficiently conveys the core action, target resource, and key capabilities without redundancy.

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

Completeness4/5

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

Given that the output schema exists and the input schema fully describes parameters, the description need not explain return values or parameter syntax. It is sufficient for a straightforward read tool, though it could be slightly more complete by noting any unique behaviors or prerequisites. Still, the provided schema and description together cover the essential context.

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

Parameters3/5

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

Schema description coverage is 100% for all five parameters, so the schema already fully documents each parameter. The description's reference to filtering and pagination adds minimal semantic value beyond what the schema provides, which aligns with the baseline score of 3.

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

Purpose4/5

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

The description clearly states the tool reads documents from a MongoDB collection with filtering and pagination, using a specific verb and resource. However, it does not distinguish itself from similar siblings like read_raw_collection or get_document, so it stops short of full differentiation.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives such as get_document or read_raw_collection. It only states what it does without any context on selection criteria or exclusions.

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

read_raw_collectionA

Read documents from the CHRawdata database (raw scraped data) with filtering and pagination.

ParametersJSON Schema
NameRequiredDescriptionDefault
skipNoNumber of documents to skip for pagination
limitNoMaximum number of documents to return (max 1000)
sort_byNoField name to sort by (optional)
filter_queryNoJSON string with MongoDB filter query (optional)
collection_nameYesName of the collection to read from (e.g. "rawdata")

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden of disclosing behavior. It indicates a read operation and mentions filtering/pagination, but it does not explicitly state that it is read-only, potential side effects (though unlikely), or any auth/rate limit considerations. It adds context about the raw scraped data, but could be more explicit.

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

Conciseness5/5

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

The description is a single concise sentence that front-loads the action ('Read documents'), specifies the resource ('CHRawdata database'), and mentions key features. Every word earns its place with no redundancy.

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

Completeness4/5

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

The tool has a full schema and an output schema, so the description does not need to explain return values. It covers purpose and basic behavior effectively. However, it lacks explicit usage guidelines compared to alternatives, so it is not fully complete for guiding an agent on when to use it.

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

Parameters3/5

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

The schema has 100% coverage with detailed descriptions for all parameters. The description mentions 'filtering and pagination' which loosely maps to filter_query, skip, limit, and sort_by, but it adds no additional detail beyond what the schema already provides. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool reads documents from the CHRawdata database (raw scraped data) with filtering and pagination. It distinguishes itself from the sibling 'read_collection' by specifying the specific database, making the purpose unambiguous.

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

Usage Guidelines3/5

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

The description implies usage for raw scraped data but does not explicitly state when to use this tool over alternatives like 'read_collection'. There is no mention of when not to use it or exclusions, leaving the guidance somewhat implicit.

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

submit_contest_detailsA

Submit AI-generated contest details (from Mistral) for validation and storage.

The details are validated for quality, then saved to the contest_details collection with automatic versioning.

ParametersJSON Schema
NameRequiredDescriptionDefault
contest_idYesThe MongoDB ObjectId of the contest
details_jsonYesJSON string matching the contest-details-v1.0.txt schema

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries the burden. It discloses that details are validated for quality, saved, and automatically versioned. It doesn't mention failure behavior, permissions, or idempotency, but the main workflow is transparent enough.

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

Conciseness5/5

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

Two concise sentences that front-load the purpose and then add essential workflow context. Every clause earns its place with no fluff or repetition of schema fields.

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

Completeness4/5

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

With an output schema present, return values are already covered. The description explains the validation, storage, and versioning enough for an agent to select and invoke the tool. It could mention integration with the generation flow (e.g., after get_contests_for_detail_generation), but that's not necessary.

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

Parameters3/5

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

Schema description coverage is 100%, with both parameters explained in the schema. The description adds no additional parameter-level detail, but the baseline of 3 is appropriate since the schema does the heavy lifting.

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

Purpose5/5

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

The description uses a specific verb 'Submit' and clearly identifies the resource ('AI-generated contest details') and destination ('contest_details collection'). It distinguishes from sibling tools by specifying contest details rather than events or records.

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

Usage Guidelines4/5

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

The description provides clear context: this tool is for submitting AI-generated contest details for validation and storage. It doesn't explicitly name alternatives or exclusions, but the scope is obvious and it differentiates from sibling submission tools.

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

submit_contest_validationA

Submit validation results from a chatbot for existing contest documents.

Same as submit_raw_validation but updates the Contests collection. Use this for Stage 2 validation before LLM normalization.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatbot_idYesThe chatbot identifier
validation_jsonYesThe JSON response from the chatbot with 'validations' array

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

Annotations are absent, so the description carries the full burden. It discloses that the tool updates the Contests collection and targets existing contest documents, indicating a mutation. However, it does not explain whether prior validations are overwritten, whether the operation is idempotent, or any prerequisite beyond 'existing' documents. The reference to submit_raw_validation gives a baseline but without that tool's description, behavioral details remain incomplete.

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

Conciseness5/5

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

The description is two short sentences: a clear purpose statement and a usage directive with sibling differentiation. There is no filler, and the key information is front-loaded.

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

Completeness4/5

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

Given only two well-documented parameters and an output schema, the description provides sufficient context: what the tool does, when to use it, and how it differs from the sibling. The main gap is behavioral detail (e.g., overwrite semantics, idempotency), but for a submit operation this is reasonably complete.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description's phrase 'validation results from a chatbot' aligns with the validation_json parameter but adds no new meaning beyond the schema's own descriptions. The chatbot_id parameter is similarly self-explanatory, and the description does not elaborate on parameter format or restrictions.

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

Purpose5/5

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

The description clearly states the tool submits validation results for contest documents, using the specific verb 'submit' and resource 'contest documents'. It also distinguishes itself from the sibling submit_raw_validation by noting it updates the Contests collection, making the purpose unambiguous.

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

Usage Guidelines5/5

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

The description explicitly says 'Same as submit_raw_validation but updates the Contests collection' and 'Use this for Stage 2 validation before LLM normalization', providing clear when-to-use guidance and naming an alternative tool. This meets the highest bar for usage differentiation.

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

submit_event_detailsA

Submit AI-generated event details (from the LLM) for validation and storage.

The details are validated for quality (minimum word count, honest readingTime, no first-person, no hallucinated URLs), then saved to the event_details collection with automatic versioning.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesThe MongoDB ObjectId of the event (from the Events collection)
details_jsonYesJSON string matching the event-details-v1.0.txt schema

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and goes well beyond basics. It discloses concrete validation rules (minimum word count, honest readingTime, no first-person, no hallucinated URLs) and states the outcome: saved to the event_details collection with automatic versioning. This is substantial behavioral context, though it omits failure handling or return specifics.

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

Conciseness5/5

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

The description is concise and well-structured: a single clear opening sentence followed by a second sentence that adds relevant validation and storage details. Every sentence earns its place, with no redundant or vague filler.

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

Completeness4/5

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

Given the existence of an output schema (which covers return values) and only two well-documented parameters, the description is reasonably complete. It conveys the purpose, validation process, storage target, and versioning behavior. It lacks explicit prerequisites (e.g., event must exist) but the schema's required event_id covers that. Overall, it is sufficient for an agent to select and invoke the tool correctly.

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

Parameters3/5

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

Schema coverage is 100% with both parameters described in the schema, so the baseline is 3. The description adds minimal extra meaningโ€”mainly that details_json is AI-generated and validatedโ€”but does not explain syntax or additional constraints beyond what the schema already provides. Thus, it meets the baseline without exceeding it.

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

Purpose5/5

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

The description clearly states a specific verb ('Submit') and resource ('AI-generated event details') with the additional scope of validation and storage. It distinguishes itself from sibling submit tools by explicitly mentioning event details and quality checks, which differentiates it from submit_contest_details or submit_structured_records.

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

Usage Guidelines4/5

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

The description provides clear context for when to use the tool: when submitting AI-generated event details for validation and storage. However, it does not explicitly mention alternatives or when not to use it, such as comparing with submit_structured_events. This is clear but lacks exclusions, matching a 4.

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

submit_full_generationA

Submit a full generation result that includes BOTH structured contest data AND contest details in one call.

Use this after get_records_for_full_generation. The JSON must contain an 'items' array, where each item has:

  • record: Structured contest data following the v4.0 schema

  • details: Contest details following contest-details-v1.0.txt schema

ParametersJSON Schema
NameRequiredDescriptionDefault
dedupe_gateNoIf True (default), skip items whose title matches an existing LIVE contest (normalized-title match from a different source or reworded title from the same source). Set False to force-insert.
generation_jsonYesJSON string with format: { "items": [ { "record": { ... structured contest object ... }, "details": { ... contest details object ... } } ] }

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are present, so the description carries the full burden. It specifies required JSON structure and schema versions, adding some transparency, but doesn't disclose side effects, error behavior, or reversibilityโ€”significant omissions for a submission tool.

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

Conciseness5/5

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

The description is compact and front-loaded, with a clear purpose sentence and a bulleted structure. Every sentence adds value, making it highly concise with no wasted words.

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

Completeness4/5

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

An output schema exists, so return values are covered. The description covers the prerequisite and input format, but doesn't mention validation errors or failure modes. For a submission tool with a straightforward API, this is reasonably complete.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds value by referencing v4.0 schema and contest-details-v1.0.txt, and by showing the items array structure, which exceeds the schema's simple 'structured contest object' phrasing.

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

Purpose5/5

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

The description states a specific verb+resource ('Submit a full generation result') and distinguishes it from other submit tools by emphasizing BOTH structured contest data and contest details in one call. It also references the predecessor tool, making its purpose unambiguous.

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

Usage Guidelines4/5

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

It explicitly instructs to use after get_records_for_full_generation, providing a clear workflow context. However, it doesn't mention when not to use it or alternatives, so it falls short of full exclusions.

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

submit_raw_validationA

Submit validation results from a chatbot for raw scraped records.

The chatbot should have received records via get_records_for_validation, validated them using its own web search, and returned a JSON response. This tool processes that JSON and updates each record's validation status in the database.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatbot_idYesThe chatbot identifier that matches get_records_for_validation
validation_jsonYesThe JSON response from the chatbot containing the 'validations' array

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the burden. It discloses the main behavior: processing JSON and updating each record's validation status. However, it omits important details such as whether existing statuses are overwritten, how invalid JSON is handled, or any idempotency guarantees. This is adequate but not comprehensive for a mutation tool.

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

Conciseness5/5

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

The description is concise and well-structured: a clear opening sentence, then a brief workflow explanation. Every sentence provides necessary context without redundancy or filler.

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

Completeness4/5

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

Given the presence of an output schema and well-described parameters, the description is largely complete for the main workflow. It explains how to use the tool and what it does, but lacks edge-case behavior like rejection reasons or side effects. Overall, it is sufficiently complete for an agent to invoke it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds a little context by mentioning the workflow with get_records_for_validation, but it does not meaningfully elaborate on the validation_json structure beyond what the schema already states. It earns the baseline score.

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

Purpose5/5

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

The description clearly states the tool's purpose: to submit validation results from a chatbot for raw scraped records. It names the specific workflow (via get_records_for_validation) and distinguishes itself from sibling tools like submit_contest_validation by targeting 'raw scraped records'.

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

Usage Guidelines4/5

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

It provides clear context on when to use the tool: after a chatbot has received records via get_records_for_validation and validated them. It implies a specific sequence but does not explicitly exclude alternative tools like submit_contest_validation, so it lacks a when-not statement.

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

submit_structured_eventsA

Submit structured event records (following the event-structuring-v1.1.txt events-v1.1 schema) produced by a chatbot and persist them to the Events collection.

This is the event counterpart of submit_structured_records:

  • Deduplication key: source.name + title (upsert-in-place on re-submit).

  • Optional duplicate-title GATE (on by default): a record whose title matches an existing LIVE event โ€” same normalized title from a different source, or a reworded title from the same source โ€” is SKIPPED and reported under "duplicates".

  • events-v1.1 defaults are applied (type="event", status="draft", visibility="public", featured=false, analytics=0) and off-schema enum values are downgraded to null with a warning (see details).

  • The audit metadata block is stripped unless keep_metadata=True.

ParametersJSON Schema
NameRequiredDescriptionDefault
dedupe_gateNoIf True (default), block events that duplicate an existing live event by normalized title. Set False to force-insert (e.g. intentional re-ingest).
events_jsonYesJSON string โ€” either a single object or an array of structured event objects following the events-v1.1 schema
keep_metadataNoIf True, retain each event's metadata audit block (searchLog, fieldConfidence, discoveredEvents, ...).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations provided, the description fully carries the behavioral burden. It discloses deduplication key, upsert-in-place behavior, the duplicate-title gate with its default and effect, applied defaults, enum downgrade behavior, and metadata stripping โ€” all beyond what the schema conveys.

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

Conciseness4/5

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

The description is well-organized with a short summary followed by bullet points for key behaviors. It is concise for the complexity it covers, though the phrase '(see details)' hints at external info that isn't provided inline, slightly reducing self-contained clarity.

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

Completeness5/5

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

Given the tool's complexity (deduplication, gating, defaults, enum handling, metadata), the description covers all major behaviors. An output schema exists, so return value documentation is not needed. The description is complete enough for an agent to use the tool correctly.

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

Parameters3/5

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

Schema coverage is 100% and the schema descriptions are already detailed for every parameter. The description adds little new parameter-specific meaning; it mostly restates the schema, so a baseline of 3 is appropriate.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Submit structured event records... and persist them to the Events collection.' It also distinguishes itself from the sibling submit_structured_records by calling itself 'the event counterpart,' making its scope unmistakable.

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

Usage Guidelines4/5

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

It explicitly names the counterpart tool, which conveys when to use this vs. that (events vs. records). However, it does not detail when not to use it or provide alternative scenarios, so it stops short of full when/when-not guidance.

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

submit_structured_recordsA

Submit structured contest records (following the contest-structuring-v4.0.txt schema) produced by a chatbot. Validates required fields and upserts into the Contests collection.

Deduplication key: source.name + title (same as process_raw_data). Plus an optional duplicate-title GATE (on by default): any record whose title matches an existing LIVE contest โ€” same normalized title from a different source, or a reworded title from the same source โ€” is SKIPPED and reported under "duplicates". The same-source exact-title match is the intended update path and still updates in place.

ParametersJSON Schema
NameRequiredDescriptionDefault
dedupe_gateNoIf True (default), block records that duplicate an existing live contest by normalized title. Set False to force-insert (e.g. intentional re-ingest).
records_jsonYesJSON string โ€” either a single object or an array of structured contest objects following the v4.0 schema

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full burden. It thoroughly discloses the upsert behavior, validation, deduplication key, the optional duplicate-title gate, skip/report behavior for duplicates, and the same-source exact-title update path.

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

Conciseness5/5

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

The description is two tight paragraphs, front-loaded with the core action and then detailing dedup logic. Every sentence contributes meaningful information with no redundancy or fluff.

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

Completeness5/5

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

Given the moderate complexity, an output schema exists, and the schema covers parameters, the description is complete: it covers what the tool does, validation, upsert, dedup rules, and the gate behavior. No critical behavioral gaps are apparent.

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

Parameters4/5

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

Schema coverage is 100% and both parameters are already well-described. The description adds value by explaining the deduplication key and the practical effect of the dedupe_gate parameter, which enriches understanding beyond the schema.

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

Purpose5/5

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

The description clearly states the tool's verb ('Submit'), resource ('structured contest records'), and outcome ('upserts into the Contests collection'), while referencing the exact schema. It distinguishes from siblings by specifying contest records rather than events or other data types.

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

Usage Guidelines4/5

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

Provides clear context: records are produced by a chatbot and follow a specific schema, and the deduplication key links it to process_raw_data. However, it does not explicitly mention when not to use this tool or name alternatives like submit_structured_events.

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

update_documentC

Update an existing document in a collection.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesThe MongoDB object ID of the document to update
update_jsonYesJSON string with the fields to update
collection_nameYesName of the collection

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full responsibility for behavioral disclosure. It states only that it updates an existing document, but does not disclose whether it performs partial updates (e.g., $set), what happens if the document is not found, whether the operation is atomic, or any permission requirements. This is a significant gap for a mutation tool.

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

Conciseness4/5

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

The description is a single, clear sentence with no unnecessary words and front-loads the action. It is appropriately concise, though it is so minimal that it under-specifies the tool's behavior, which is more a completeness issue than a conciseness issue.

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

Completeness2/5

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

The tool is a simple update operation, but the description lacks crucial contextual details: the semantics of the update (partial vs full replacement), error handling when the document doesn't exist, and return value expectations (though an output schema exists). Given the presence of a schema and output schema, the description should at least clarify the update behavior to be minimally complete.

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

Parameters3/5

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

The input schema describes all three parameters (collection_name, document_id, update_json) with 100% coverage, so the baseline is 3. The description adds no additional meaning about the parameters beyond what the schema already provides, but that is acceptable given the schema's completeness.

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

Purpose4/5

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

The description uses a specific verb 'Update' and identifies the resource as 'a document in a collection', which clearly distinguishes it from sibling tools like create_document, delete_document, and get_document. However, it lacks any qualifiers about the update mechanism (e.g., partial vs replace) that would add precision, so it is clear but not fully differentiated.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. There are no exclusions, prerequisites, or alternative tool mentions. The sibling list includes create_document, delete_document, get_document, and read_collection, but the description doesn't differentiate beyond the basic action.

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

verify_image_urlsA

Verify image URLs for contests and mark broken images in the database.

This tool scans contests that have an image.primary.url, performs a lightweight HTTP HEAD/GET to verify reachability, and updates image.primary.status to 'active' or 'broken'. It returns a report.

ParametersJSON Schema
NameRequiredDescriptionDefault
skipNo
batch_sizeNo
user_agentNoDataFlow-MCP/1.0

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries full responsibility for disclosing behavior. It clearly states that it performs HTTP HEAD/GET, updates image.primary.status to 'active' or 'broken', and returns a report. This gives good insight into side effects and actions, though it does not mention potential external network calls' impact or rate limits explicitly.

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

Conciseness5/5

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

The description is compact and front-loaded: the first sentence gives the core purpose, and the second expands with necessary technical details. Every sentence earns its place, with no redundancy.

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

Completeness5/5

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

Given the tool's simplicity, the presence of an output schema (covering the report), and the description's coverage of scanning, verification method, status update, and return value, the description is sufficiently complete. It provides all essential context for an agent to use the tool correctly.

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

Parameters2/5

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

Schema description coverage is 0%, and the description does not explain the three parameters (skip, batch_size, user_agent). The parameter names are somewhat self-explanatory, but the description adds no value for understanding their syntax, defaults, or interplay, which is a clear gap.

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

Purpose5/5

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

The description clearly states the verb ('Verify') and resource ('image URLs for contests') and distinguishes it from read-only siblings like get_contests_with_broken_images by mentioning the database update. The purpose is unmistakable.

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

Usage Guidelines4/5

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

The description implies appropriate usage by specifying the exact scope (contests with image.primary.url) and the action performed. It does not explicitly name alternatives or exclusions, but the context is clear enough to guide an agent.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 41 tool updatesv1.0.0
    • First observedapply_migration_patch
    • First observedbulk_apply_migrations
    • First observedcreate_document
    • First observeddatabase_status
    • First observeddelete_document
    • First observedfind_duplicate_contests
    • First observedflag_contest_discrepancy
    • First observedgenerate_cover_prompt_for_contest
    • First observedget_contests_for_detail_generation
    • First observedget_contests_for_migration
    • First observedget_contests_missing_images
    • First observedget_contests_with_broken_images
    • First observedget_document
    • First observedget_event_detail_status
    • First observedget_events
    • First observedget_events_for_detail_generation
    • First observedget_events_overview
    • First observedget_migration_status
    • First observedget_prompted_contests
    • First observedget_raw_data_status
    • First observedget_records_for_contest_validation
    • First observedget_records_for_events
    • First observedget_records_for_full_generation
    • First observedget_records_for_structuring
    • First observedget_records_for_validation
    • First observedget_scraped_overview
    • First observedget_validation_prompt
    • First observedget_validation_status
    • First observedhealth_check
    • First observedprocess_raw_data
    • First observedread_collection
    • First observedread_raw_collection
    • First observedsubmit_contest_details
    • First observedsubmit_contest_validation
    • First observedsubmit_event_details
    • First observedsubmit_full_generation
    • First observedsubmit_raw_validation
    • First observedsubmit_structured_events
    • First observedsubmit_structured_records
    • First observedupdate_document
    • First observedverify_image_urls

TDQS

B3.4/5.0
Disambiguation2/5

Many tools follow similar 'get_records_for_X' and 'submit_X' patterns, making it difficult to distinguish between validation, structuring, detail generation, and migration workflows. While descriptions are detailed, the overlapping purposes and subtle differences (e.g., get_records_for_structuring vs get_records_for_full_generation) create ambiguity.

Naming Consistency4/5

Most tools use a consistent get_/submit_/create_/update_ verb-noun convention, with minor deviations like database_status and health_check. The get_records_for_* and get_contests_for_* patterns are predictable, though read_collection vs get_document is slightly inconsistent.

Tool Count2/5

41 tools is far beyond the typical well-scoped range. Even for a complex data pipeline, many tools are narrow pipeline stages (e.g., get_records_for_validation, get_records_for_contest_validation, get_records_for_structuring) that could be consolidated. The tool surface feels bloated.

Completeness3/5

The pipeline covers raw data ingestion, validation, structuring, detail generation, migration, and image verification, which is fairly comprehensive. However, there are gaps such as no explicit image update/replacement tool after generating cover prompts, and events lack migration tools. Generic CRUD tools partially fill gaps.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A powerful Model Context Protocol (MCP) server implementation that provides standardized interaction with MongoDB databases, supporting complete CRUD operations, async patterns, and real-time updates via SSE.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A production-ready MCP server scaffold that features built-in authentication, Docker support, and a comprehensive CI/CD release pipeline. It provides a standardized template for deploying servers with multi-transport support and configurable read-only modes.
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A minimal, production-ready MCP server boilerplate for building AI-powered backend services with TypeScript, MongoDB, and JWT authentication.
    1
    -

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/SreeTarak2/dataflow_mcp'

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