DataFlow MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| LOGS_DIR | No | Directory for log files. Default: ./logs. | |
| LOG_LEVEL | No | Logging level (DEBUG, INFO, WARNING, ERROR). Default: INFO. | |
| MONGO_URI | Yes | MongoDB connection URI. Required. | |
| MONGO_DB_NAME | Yes | MongoDB database name. Required. | |
| MONGO_TIMEOUT | No | Connection timeout in milliseconds. Default: 5000. | |
| MONGO_USE_TLS | No | Enable TLS for MongoDB connection. Default: false. | |
| MONGO_POOL_SIZE | No | Connection pool size. Default: 10. | |
| MONGO_CA_CERT_PATH | No | Path to CA certificate file for TLS. | |
| MONGO_MAX_IDLE_TIME | No | Maximum idle time in milliseconds. Default: 45000. | |
| MONGO_ALLOW_INVALID_CERTS | No | Allow invalid certificates. Default: false. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| 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). |
| 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.). |
| 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. |
| 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. |
| 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:
|
| 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:
|
| 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. |
| 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. |
| read_collectionB | Read documents from a MongoDB collection with filtering and pagination. |
| get_documentB | Get a single document by ID. |
| create_documentB | Create a new document in a collection. |
| update_documentC | Update an existing document in a collection. |
| delete_documentB | Delete a document from a collection. |
| 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:
|
| 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:
|
| 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. |
| 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. |
| 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. |
| 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. |
| 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. |
| health_checkA | Check the health status of the MCP server process. Returns: Dictionary with health status and metrics |
| database_statusA | Check MongoDB connectivity separately from server health. Returns: Database connection status and any connection error message |
| 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. |
| 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. |
| 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. |
| verify_image_urlsA | Verify image URLs for contests and mark broken images in the database. This tool scans contests that have an |
| 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. |
| 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 |
| 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. |
| apply_migration_patchA | Apply a validated normalized patch to update a single contest. All patches go through 4 validations before writing:
|
| bulk_apply_migrationsA | Apply multiple migration patches in one batch (with validation). All patches go through 4 validations before writing. |
| get_raw_data_statusA | Return a summary of what raw scraped data is available in CHRawdata.rawdata. If |
| read_raw_collectionA | Read documents from the CHRawdata database (raw scraped data) with filtering and pagination. |
| 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. |
| process_raw_dataA | Read validated raw records from CHRawdata.rawdata for a given scraper
NOTE: By default, only records with validationStatus="validated" are processed. Run get_records_for_validation + submit_raw_validation first. |
| 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. |
| submit_raw_validationA | Submit validation results from a chatbot for raw scraped records. The chatbot should have received records via |
| 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. |
| 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. |
| 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. |
| 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. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/SreeTarak2/dataflow_mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server