Back to Browse

Catchall MCP Server

Developer ToolsLow Risk10.0MCP RegistryRemote
Free

Server data from the Official MCP Registry

Web search API: find every relevant event across the open web, not just the top results.

About

Web search API: find every relevant event across the open web, not just the top results.

Remote endpoints: streamable-http: https://catchall-mcp.newscatcherapi.com/mcp

Security Report

10.0
Low Risk10.0Low Risk

Valid MCP server (0 strong, 3 medium validity signals). No known CVEs in dependencies. Imported from the Official MCP Registry. 1 finding(s) downgraded by scanner intelligence.

60 tools verified · Open access · 1 issue found

Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.

Permissions Required

This plugin requests these system permissions. Most are normal for its category.

HTTP Network Access

Connects to external APIs or services over the internet.

env_vars

Check that this permission is expected for this type of plugin.

How to Connect

Remote Plugin

No local installation needed. Your AI client connects to the remote endpoint directly.

Add this to your MCP configuration to connect:

{
  "mcpServers": {
    "com-newscatcherapi-catchall": {
      "url": "https://catchall-mcp.newscatcherapi.com/mcp"
    }
  }
}

Documentation

View on GitHub

From the project's GitHub README.

Newscatcher CatchAll MCP Server

MCP server for the NewsCatcher CatchAll Web Search API.

Quick Start — Use Our Hosted Server

You don't need to clone or run this repo to use the MCP — NewsCatcher runs a hosted instance:

https://catchall-mcp.newscatcherapi.com/mcp?apiKey=YOUR_CATCHALL_API_KEY

Get a CatchAll API key at platform.newscatcherapi.com, then connect:

{
  "mcpServers": {
    "catchall": {
      "type": "http",
      "url": "https://catchall-mcp.newscatcherapi.com/mcp?apiKey=YOUR_CATCHALL_API_KEY"
    }
  }
}

Or via Claude Code CLI:

claude mcp add --transport http catchall "https://catchall-mcp.newscatcherapi.com/mcp?apiKey=YOUR_CATCHALL_API_KEY"

Full integration docs: https://www.newscatcherapi.com/docs/web-search-api/integrations/mcp

Prefer to run the server yourself (locally or self-hosted)? See Running below.

Tool To Endpoint Mapping

Jobs

MCP ToolMethodEndpoint
initialize_queryPOST/catchAll/initialize
submit_queryPOST/catchAll/submit
validate_queryPOST/catchAll/validate
continue_jobPOST/catchAll/continue
list_user_jobsGET/catchAll/jobs/user
get_job_statusGET/catchAll/status/{job_id}
pull_resultsGET/catchAll/pull/{job_id}
pull_job_csvGET/catchAll/pull/{job_id}/csv
delete_jobDELETE/catchAll/jobs/{job_id}

Job listing filters: list_user_jobs supports search, ownership, project_id, and mode (base or lite) filters in addition to page/page_size.

Monitors

MCP ToolMethodEndpoint
create_monitorPOST/catchAll/monitors/create
update_monitorPATCH/catchAll/monitors/{monitor_id}
delete_monitorDELETE/catchAll/monitors/{monitor_id}
list_monitorsGET/catchAll/monitors/
list_monitor_jobsGET/catchAll/monitors/{monitor_id}/jobs
get_monitor_statusGET/catchAll/monitors/{monitor_id}/status
pull_monitor_resultsGET/catchAll/monitors/pull/{monitor_id}
pull_monitor_csvGET/catchAll/monitors/pull/{monitor_id}/csv
enable_monitorPOST/catchAll/monitors/{monitor_id}/enable
disable_monitorPOST/catchAll/monitors/{monitor_id}/disable

Webhooks

MCP ToolMethodEndpoint
list_webhooksGET/catchAll/webhooks
create_webhookPOST/catchAll/webhooks
get_webhookGET/catchAll/webhooks/{webhook_id}
update_webhookPATCH/catchAll/webhooks/{webhook_id}
delete_webhookDELETE/catchAll/webhooks/{webhook_id}
test_webhookPOST/catchAll/webhooks/{webhook_id}/test
assign_webhook_resourcePOST/catchAll/webhooks/{webhook_id}/resources
list_webhook_resourcesGET/catchAll/webhooks/{webhook_id}/resources
remove_webhook_resourceDELETE/catchAll/webhooks/{webhook_id}/resources/{resource_type}/{resource_id}
list_resource_webhooksGET/catchAll/resources/{resource_type}/{resource_id}/webhooks
get_webhook_historyGET/catchAll/webhook-history
trigger_webhookPOST/catchAll/webhook/trigger/{resource_type}/{resource_id}

Webhook notes: create_webhook accepts an optional project_id to attach the webhook to a project on creation. list_webhooks also accepts an optional project_id to filter to webhooks belonging to a specific project. get_webhook_history queries in one of two modes — pass resource_type + resource_id for a job/monitor/monitor_group's deliveries, or pass webhook_id for everything delivered through one webhook (exactly one mode per call). Manual test deliveries (test_webhook) only appear in webhook mode and are recorded with resource_type: "test".

Projects

MCP ToolMethodEndpoint
create_projectPOST/catchAll/projects/
list_projectsGET/catchAll/projects/
get_projectGET/catchAll/projects/{project_id}
update_projectPATCH/catchAll/projects/{project_id}
delete_projectDELETE/catchAll/projects/{project_id}
get_project_overviewGET/catchAll/projects/{project_id}/overview
add_project_resourcesPOST/catchAll/projects/{project_id}/resources
list_project_resourcesGET/catchAll/projects/{project_id}/resources
remove_project_resourceDELETE/catchAll/projects/{project_id}/resources/{resource_type}/{resource_id}

Project resources: resource_type is one of job, monitor, dataset, monitor_group, or webhook. A webhook can belong to several projects at once. delete_project with delete_resources=true deletes the contained jobs, monitors, datasets, and monitor groups, but webhooks are only detached — never deleted — and the response's deleted_resources reports them under a webhook_unlinked count.

Datasets

MCP ToolMethodEndpoint
create_datasetPOST/catchAll/datasets/
list_datasetsGET/catchAll/datasets/
get_datasetGET/catchAll/datasets/{dataset_id}
update_datasetPATCH/catchAll/datasets/{dataset_id}
delete_datasetDELETE/catchAll/datasets/{dataset_id}
add_dataset_entitiesPOST/catchAll/datasets/{dataset_id}/entities
remove_dataset_entitiesDELETE/catchAll/datasets/{dataset_id}/entities
list_dataset_entitiesPOST/catchAll/datasets/{dataset_id}/entities/list
get_dataset_statusGET/catchAll/datasets/{dataset_id}/status
create_dataset_from_csvPOST/catchAll/datasets/upload
append_csv_to_datasetPOST/catchAll/datasets/{dataset_id}/upload

CSV uploads (v1.6.1): create_dataset_from_csv and append_csv_to_dataset take the CSV content in the file parameter — raw CSV text or standard base64. They never read a path from the server's filesystem, so they stay safe on a remote/hosted MCP. Inline CSV content is capped at a hard 10 MB (after base64 decoding). create_dataset_from_csv also accepts the new optional project_id field.

Entities

MCP ToolMethodEndpoint
create_entityPOST/catchAll/entities/
list_entitiesGET/catchAll/entities/
create_entities_batchPOST/catchAll/entities/batch
get_entityGET/catchAll/entities/{entity_id}
update_entityPATCH/catchAll/entities/{entity_id}
delete_entityDELETE/catchAll/entities/{entity_id}

external_entity_id (v1.6.3): create_entity and update_entity accept an optional external_entity_id string — a customer-supplied identifier that links the entity to a record in an external system. project_id (v1.8.0): list_entities accepts an optional project_id to filter to entities belonging to a specific project.

Source Groups

MCP ToolMethodEndpoint
list_source_groupsGET/catchAll/source-groups

Source groups (v1.8.0): named, reusable domain allowlists (public groups plus any organization-visibility groups your organization can access). list_source_groups returns each group's slug, name, and description. The direct API's POST /catchAll/submit now accepts a source_groups field of slugs to scope fetching to a domain allowlist; submit_query does not yet expose this parameter — use the direct API for that until a future release adds it here.

User & Meta

MCP ToolMethodEndpoint
get_user_limitsPOST/catchAll/user/limits
check_healthGET/health
get_versionGET/version

Authentication

API key precedence (highest to lowest):

  1. api_key tool parameter
  2. x-api-key request header
  3. Authorization: Bearer <key> request header
  4. URL query parameter ?apiKey=...
  5. CATCHALL_API_KEY environment variable

check_health and get_version do not require API key auth.

Hosted deployment (FastMCP Gateway)

When deployed via fastmcp.app, a stateless gateway sits in front of the server. The gateway forwards HTTP headers to the backend but not URL query parameters. Use the x-api-key header or CATCHALL_API_KEY environment variable instead of ?apiKey=.

Claude Code / Cursor:

{
  "mcpServers": {
    "catchall": {
      "type": "http",
      "url": "https://YOUR-DEPLOYMENT.fastmcp.app/mcp",
      "headers": { "x-api-key": "YOUR_API_KEY" }
    }
  }
}

Or via CLI:

claude mcp add --transport http catchall "https://YOUR-DEPLOYMENT.fastmcp.app/mcp" \
  --header "x-api-key: YOUR_API_KEY"

Direct server access (no gateway): ?apiKey=YOUR_KEY in the URL still works.

Core Workflow (Jobs)

  1. Optional: call initialize_query to preview validators/enrichments/date window.
  2. initialize_query is preview-only (it does not create a job) and suggestions are non-deterministic.
  3. Submit with submit_query (query required). You can send only query; omitted optional fields are auto-selected/generated.
  4. Optional fields are independent: provide any subset (for example, custom validators only), omitted ones are still auto-generated.
  5. start_date/end_date filter web page discovery dates, not event dates in extracted content.
  6. For event-time accuracy, use event-focused validators/enrichments and verify event_date in pulled results.
  7. Poll get_job_status: first check after ~1-2 minutes, then every 30-60 seconds, stop on completed or failed.
  8. Pull with pull_results; partial data appears during enriching.
  9. Paginate while page < total_pages to retrieve all available records.
  10. Use continue_job only to process more records (cost-affecting). It applies only to jobs originally submitted with limit.
  11. continue_job.new_limit is optional; if omitted, API defaults to your plan maximum.
  12. page/page_size/total_pages represent already-available records; use progress_validated < candidate_records to detect if more records may still appear.

Limit vs Page Size

  • limit (submit_query, continue_job) controls how many records are processed and therefore affects cost. If provided, must be >= 10. Omit to retrieve everything up to your plan's maximum.
  • page_size (pull_results, list_user_jobs) controls pagination only and does not affect processing cost.
  • pull_results.page_size default is 100.
  • page_size range is 1..1000.
  • pull_results response includes error (failed jobs) and limit (applied job limit).

API-Enforced Monitor Constraints

  • create_monitor.backfill=true: reference job end_date must be within the last 7 days.
  • create_monitor.backfill=false: reference job age constraint does not apply.
  • Monitor minimum schedule frequency depends on plan.
  • create_monitor supports optional limit (minimum 10), backfill (default true), timezone, webhook_ids, and project_id.
  • Webhooks are centralized in v1.5.3: register them with create_webhook, then attach by ID via create_monitor.webhook_ids / update_monitor.webhook_ids (no inline webhook config).
  • Monitors are only supported for base jobs (not lite).
  • enable_monitor supports optional backfill.
  • update_monitor updates webhook_ids and/or run limit (pass webhook_ids=[] to clear assignments).
  • list_monitors supports pagination via page and page_size plus search, ownership, and project_id filters; it returns total, page, page_size, total_pages, monitors.

Enrichment Output Notes

  • enrichment.enrichment_confidence is always present.
  • Company enrichments are structured objects with:
    • source_text
    • confidence
    • metadata.name
    • metadata.domain_url
    • metadata.domain_url_confidence

Error Handling

Tools return:

  • Pretty JSON string on success.
  • (v1.8.0) An MCP tool error (isError=True) for any upstream non-2xx response (bad api_key, invalid/foreign project_id, not-found ids, validation failures, etc.) or unhandled exception. The error message carries the upstream status code and message, for example API Error (401): Api key not found. Before v1.8.0, tools swallowed these failures and returned a plain "Error: ..." string as a successful tool result — clients checking only isError would see a false success. That has been fixed: every tool now raises a ToolError instead of returning an error string, so failures are always reported as real tool errors.

Running

Install dependencies:

pip install -r requirements.txt

Run over stdio:

python server.py

Run over HTTP (if fastmcp CLI is available):

fastmcp run server.py:mcp --transport streamable-http --host 0.0.0.0 --port 8000

Reviews

No reviews yet

Be the first to review this server!