Back to Directory/Search & Knowledge

CatchAll

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

Search & KnowledgePythonv1.6.5

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

Setup from the maintainer

This listing does not have a supported local package template. Use the maintainer’s documentation for its hosted endpoint, authentication, and client-specific setup. No install command has been inferred.

Learn More