streamable-httpMITupdated 12d ago
MCP server for the NewsCatcher CatchAll Web Search API.
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_jobssupportssearch,ownership,project_id, andmode(baseorlite) filters in addition topage/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_webhookaccepts an optionalproject_idto attach the webhook to a project on creation.list_webhooksalso accepts an optionalproject_idto filter to webhooks belonging to a specific project.get_webhook_historyqueries in one of two modes — passresource_type+resource_idfor a job/monitor/monitor_group's deliveries, or passwebhook_idfor everything delivered through one webhook (exactly one mode per call). Manual test deliveries (test_webhook) only appear in webhook mode and are recorded withresource_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_typeis one ofjob,monitor,dataset,monitor_group, orwebhook. A webhook can belong to several projects at once.delete_projectwithdelete_resources=truedeletes the contained jobs, monitors, datasets, and monitor groups, but webhooks are only detached — never deleted — and the response'sdeleted_resourcesreports them under awebhook_unlinkedcount.
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_csvandappend_csv_to_datasettake the CSV content in thefileparameter — 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_csvalso accepts the new optionalproject_idfield.
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_entityandupdate_entityaccept an optionalexternal_entity_idstring — a customer-supplied identifier that links the entity to a record in an external system.project_id(v1.8.0):list_entitiesaccepts an optionalproject_idto 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_groupsreturns each group'sslug,name, anddescription. The direct API'sPOST /catchAll/submitnow accepts asource_groupsfield of slugs to scope fetching to a domain allowlist;submit_querydoes 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):
api_keytool parameterx-api-keyrequest headerAuthorization: Bearer <key>request header- URL query parameter
?apiKey=... CATCHALL_API_KEYenvironment 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)
- Optional: call
initialize_queryto preview validators/enrichments/date window. initialize_queryis preview-only (it does not create a job) and suggestions are non-deterministic.- Submit with
submit_query(queryrequired). You can send onlyquery; omitted optional fields are auto-selected/generated. - Optional fields are independent: provide any subset (for example, custom
validatorsonly), omitted ones are still auto-generated. start_date/end_datefilter web page discovery dates, not event dates in extracted content.- For event-time accuracy, use event-focused validators/enrichments and verify
event_datein pulled results. - Poll
get_job_status: first check after ~1-2 minutes, then every 30-60 seconds, stop oncompletedorfailed. - Pull with
pull_results; partial data appears duringenriching. - Paginate while
page < total_pagesto retrieve all available records. - Use
continue_jobonly to process more records (cost-affecting). It applies only to jobs originally submitted withlimit. continue_job.new_limitis optional; if omitted, API defaults to your plan maximum.page/page_size/total_pagesrepresent already-available records; useprogress_validated < candidate_recordsto 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_sizedefault is100.page_sizerange is1..1000.pull_resultsresponse includeserror(failed jobs) andlimit(applied job limit).
API-Enforced Monitor Constraints
create_monitor.backfill=true: reference jobend_datemust 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_monitorsupports optionallimit(minimum10),backfill(defaulttrue),timezone,webhook_ids, andproject_id.- Webhooks are centralized in v1.5.3: register them with
create_webhook, then attach by ID viacreate_monitor.webhook_ids/update_monitor.webhook_ids(no inline webhook config). - Monitors are only supported for
basejobs (notlite). enable_monitorsupports optionalbackfill.update_monitorupdateswebhook_idsand/or runlimit(passwebhook_ids=[]to clear assignments).list_monitorssupports pagination viapageandpage_sizeplussearch,ownership, andproject_idfilters; it returnstotal,page,page_size,total_pages,monitors.
Enrichment Output Notes
enrichment.enrichment_confidenceis always present.- Company enrichments are structured objects with:
source_textconfidencemetadata.namemetadata.domain_urlmetadata.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 (badapi_key, invalid/foreignproject_id, not-found ids, validation failures, etc.) or unhandled exception. The error message carries the upstream status code and message, for exampleAPI 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 onlyisErrorwould see a false success. That has been fixed: every tool now raises aToolErrorinstead 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
安装
把 CatchAll 添加到你的客户端。选择你正在使用的那个。
claude mcp add --transport http catchall https://catchall-mcp.newscatcherapi.com/mcpcodex mcp add catchall --url https://catchall-mcp.newscatcherapi.com/mcp{
"mcpServers": {
"catchall": {
"url": "https://catchall-mcp.newscatcherapi.com/mcp"
}
}
}Add to `~/.cursor/mcp.json`, or `.cursor/mcp.json` for a single project.
{
"servers": {
"catchall": {
"type": "http",
"url": "https://catchall-mcp.newscatcherapi.com/mcp"
}
}
}Add to `.vscode/mcp.json` in your workspace.
{
"mcpServers": {
"catchall": {
"url": "https://catchall-mcp.newscatcherapi.com/mcp"
}
}
}Add to `claude_desktop_config.json`, then restart Claude Desktop.
{
"mcpServers": {
"catchall": {
"serverUrl": "https://catchall-mcp.newscatcherapi.com/mcp"
}
}
}Add to `~/.codeium/windsurf/mcp_config.json`.
评分
39 / 100
不完整
- 文档25/25
- 维护19/25
- 可信度16/20
- 能力0/15
- 安装体验12/15
- Documents what it does and how to connect
- Has a resolvable package or endpoint
- Exposes at least one tool, prompt or resource
- README has substantive content
- Includes a code example
- Documents its configuration
- Mentions credentials or security posture
- Last commit 5 days ago
- Has a release history
- Repository is not archived
- Licensed MIT
- Namespace verified in the official MCP registry
- Claimed by its owner
- Published under an organisation
- 0 tool(s) documented
- Provides prompt templates
- Provides resources
- 6 documented install method(s)
- Published to a package registry
- Offers a hosted endpoint — no local install
版本历史
| 版本 | 发布于 |
|---|---|
| 1.6.5最新 | 2026年7月14日 |
| 1.6.4 | 2026年7月14日 |