跳到正文
MCP ThesaurusMCP Thesaurus

CatchAll

社区Incomplete39/100认领

streamable-httpMITupdated 12d ago

MCP server for the NewsCatcher CatchAll Web Search API.

源码官网文档1

CatchAll 能做什么?

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 Tool Method Endpoint
initialize_query POST /catchAll/initialize
submit_query POST /catchAll/submit
validate_query POST /catchAll/validate
continue_job POST /catchAll/continue
list_user_jobs GET /catchAll/jobs/user
get_job_status GET /catchAll/status/{job_id}
pull_results GET /catchAll/pull/{job_id}
pull_job_csv GET /catchAll/pull/{job_id}/csv
delete_job DELETE /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 Tool Method Endpoint
create_monitor POST /catchAll/monitors/create
update_monitor PATCH /catchAll/monitors/{monitor_id}
delete_monitor DELETE /catchAll/monitors/{monitor_id}
list_monitors GET /catchAll/monitors/
list_monitor_jobs GET /catchAll/monitors/{monitor_id}/jobs
get_monitor_status GET /catchAll/monitors/{monitor_id}/status
pull_monitor_results GET /catchAll/monitors/pull/{monitor_id}
pull_monitor_csv GET /catchAll/monitors/pull/{monitor_id}/csv
enable_monitor POST /catchAll/monitors/{monitor_id}/enable
disable_monitor POST /catchAll/monitors/{monitor_id}/disable

Webhooks

MCP Tool Method Endpoint
list_webhooks GET /catchAll/webhooks
create_webhook POST /catchAll/webhooks
get_webhook GET /catchAll/webhooks/{webhook_id}
update_webhook PATCH /catchAll/webhooks/{webhook_id}
delete_webhook DELETE /catchAll/webhooks/{webhook_id}
test_webhook POST /catchAll/webhooks/{webhook_id}/test
assign_webhook_resource POST /catchAll/webhooks/{webhook_id}/resources
list_webhook_resources GET /catchAll/webhooks/{webhook_id}/resources
remove_webhook_resource DELETE /catchAll/webhooks/{webhook_id}/resources/{resource_type}/{resource_id}
list_resource_webhooks GET /catchAll/resources/{resource_type}/{resource_id}/webhooks
get_webhook_history GET /catchAll/webhook-history
trigger_webhook POST /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 Tool Method Endpoint
create_project POST /catchAll/projects/
list_projects GET /catchAll/projects/
get_project GET /catchAll/projects/{project_id}
update_project PATCH /catchAll/projects/{project_id}
delete_project DELETE /catchAll/projects/{project_id}
get_project_overview GET /catchAll/projects/{project_id}/overview
add_project_resources POST /catchAll/projects/{project_id}/resources
list_project_resources GET /catchAll/projects/{project_id}/resources
remove_project_resource DELETE /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 Tool Method Endpoint
create_dataset POST /catchAll/datasets/
list_datasets GET /catchAll/datasets/
get_dataset GET /catchAll/datasets/{dataset_id}
update_dataset PATCH /catchAll/datasets/{dataset_id}
delete_dataset DELETE /catchAll/datasets/{dataset_id}
add_dataset_entities POST /catchAll/datasets/{dataset_id}/entities
remove_dataset_entities DELETE /catchAll/datasets/{dataset_id}/entities
list_dataset_entities POST /catchAll/datasets/{dataset_id}/entities/list
get_dataset_status GET /catchAll/datasets/{dataset_id}/status
create_dataset_from_csv POST /catchAll/datasets/upload
append_csv_to_dataset POST /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 Tool Method Endpoint
create_entity POST /catchAll/entities/
list_entities GET /catchAll/entities/
create_entities_batch POST /catchAll/entities/batch
get_entity GET /catchAll/entities/{entity_id}
update_entity PATCH /catchAll/entities/{entity_id}
delete_entity DELETE /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 Tool Method Endpoint
list_source_groups GET /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 Tool Method Endpoint
get_user_limits POST /catchAll/user/limits
check_health GET /health
get_version GET /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