{"server":{"name":"com.newscatcherapi/catchall","title":"CatchAll","$schema":"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json","remotes":[{"url":"https://catchall-mcp.newscatcherapi.com/mcp","type":"streamable-http","headers":[{"name":"x-api-key","isSecret":true,"isRequired":true,"description":"CatchAll API key from platform.newscatcherapi.com"}]}],"version":"1.6.5","repository":{"url":"https://github.com/Newscatcher/catchall-mcp","source":"github"},"description":"Web search API: find every relevant event across the open web, not just the top results."},"_meta":{"io.modelcontextprotocol.registry/official":{"status":"active","isLatest":true,"updatedAt":"2026-07-14T12:06:04.823786Z","publishedAt":"2026-07-14T12:06:04.823786Z","statusChangedAt":"2026-07-14T12:06:04.823786Z"},"dev.protogrid/connectability":{"class":"R1","autonomous":true,"human_steps":[],"preferred":{"kind":"remote","idx":0},"remotes":[{"idx":0,"url":"https://catchall-mcp.newscatcherapi.com/mcp","transport":"streamable-http","templated":false,"headers":[{"name":"x-api-key","required":true,"secret":true,"value":null,"secret_names":["X_API_KEY"]}],"auth":{"type":"api_key","location":null,"secret_name":"X_API_KEY","oauth":null},"protocol":{"supported_versions":["2026-07-28"],"stateless":true},"health":{"reachable":true,"uptime_30d":1,"latency_ms_p50":664,"consecutive_failures":0,"last_probe_at":"2026-10-19T21:45:26.652Z","last_ok_at":"2026-10-19T21:45:26.652Z"}}],"packages":[]},"dev.protogrid/tools":[{"name":"add_dataset_entities","title":"Add Dataset Entities","description":"Add existing entities to a dataset.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"add_project_resources","title":"Add Project Resources","description":"Add one or more resources to a project.\n\nWebhooks are first-class project resources: a webhook can belong to several\nprojects at the same time, and deleting a project only detaches its\nwebhooks — it never deletes them.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"append_csv_to_dataset","title":"Append Csv To Dataset","description":"Append entities from a CSV file to an existing dataset.\n\nParses the CSV and appends its entities to the dataset. Each row must\nhave a `name` column; include a `domain` or `description` column (or both)\nfor meaningful enrichment. Duplicate rows (by name) are skipped. To create\na new dataset from a CSV, use `create_dataset_from_csv` instead.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"assign_webhook_resource","title":"Assign Webhook Resource","description":"Map a resource (job, monitor, or monitor_group) to a webhook.\n\nUse when:\n- You want a webhook to fire for a specific job or monitor's deliveries.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"check_health","title":"Check Health","description":"Check API health status.\n\nThis tool maps to GET /health and does not require an API key.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"continue_job","title":"Continue Job","description":"Expand a job by processing more records beyond the initial limit.\n\nThis increases the number of records the system processes (which costs\nadditional credits). Only use this when the user wants MORE data processed.\n\nThis only applies to jobs originally submitted with `limit`.\nIf a job was submitted without `limit`, there is nothing to continue.\nThe new_limit must be greater than the previous limit when provided.\nIf omitted, API defaults to your plan maximum.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"create_dataset","title":"Create Dataset","description":"Create a new dataset.\n\nDatasets are collections of entities (companies/people). Connect a dataset to\na job via `submit_query(connected_dataset_ids=[...])` to narrow retrieval scope.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"create_dataset_from_csv","title":"Create Dataset From Csv","description":"Create a new dataset by uploading a CSV file.\n\nThe CSV must have at least a `name` column. For meaningful entity\nenrichment each row should also include a `domain` column or a\n`description` column (or both) — a row with only a name is accepted but\nproduces lower-quality enrichment. Additional columns are mapped to entity\nattributes. Max file size is plan-dependent. To add CSV rows to an\nexisting dataset, use `append_csv_to_dataset` instead.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"create_entities_batch","title":"Create Entities Batch","description":"Create multiple entities in one call.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"create_entity","title":"Create Entity","description":"Create a single entity (a company or person).\n\n``name`` is required plus at least one identifying\nfield: either ``description`` or ``additional_attributes.company_attributes.domain``.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"create_monitor","title":"Create Monitor","description":"Create a recurring monitor from a completed job.\n\nMonitors re-run a job's query on a schedule. Use the explore -> refine -> automate\npattern: submit a job, refine until results match, then create a monitor.\n\nThe schedule is defined in natural language (e.g., 'every day at 9 AM EST').\nAlways include a timezone (in the schedule text or via the `timezone` arg).\nAPI-enforced constraints apply:\n- If `backfill=true`, reference job end_date must be within the last 7 days\n- If `backfill=false`, reference job age does not matter\n- Minimum schedule frequency depends on your plan\n\nWebhooks are now centralized: register them with `create_webhook`, then pass\ntheir IDs here via `webhook_ids` (there is no inline webhook config anymore).","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"create_project","title":"Create Project","description":"Create a new project.\n\nProjects group related resources (jobs, monitors, datasets, monitor_groups)\nso you can organize work and filter listings by `project_id`.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"create_webhook","title":"Create Webhook","description":"Create a new webhook endpoint.\n\nUse when:\n- You want to register a URL to receive job or monitor result deliveries.\n- You need a webhook_id to attach to a monitor (via webhook_ids) or a job submission.\n- You want the webhook associated with a project from the start (pass `project_id`).","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"delete_dataset","title":"Delete Dataset","description":"Permanently delete a dataset.\n\nThe entities the dataset referenced are not deleted; only the dataset and its\nentity associations are removed.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"delete_entity","title":"Delete Entity","description":"Permanently delete an entity.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"delete_job","title":"Delete Job","description":"Permanently delete a job and its results.\n\nUse when:\n- You want to remove a job you no longer need from your account.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"delete_monitor","title":"Delete Monitor","description":"Permanently delete a monitor and stop its scheduled runs.\n\nUse when:\n- You want to remove a monitor entirely (use `disable_monitor` to only pause it).","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"delete_project","title":"Delete Project","description":"Delete a project.\n\nBy default the project's resources (jobs, monitors, etc.) are detached but\nkept. Set `delete_resources=true` to also delete the contained jobs,\nmonitors, datasets, and monitor groups. Webhooks are the exception: they\nare never deleted by this operation — an attached webhook is only detached\nfrom the project and keeps working (it may belong to other projects or\nresources independently of this one).","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"delete_webhook","title":"Delete Webhook","description":"Permanently delete a webhook endpoint.\n\nUse when:\n- You want to remove a webhook from your account.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"disable_monitor","title":"Disable Monitor","description":"Disable a monitor to stop its scheduled runs.\n\nThe monitor can be re-enabled later with enable_monitor.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"enable_monitor","title":"Enable Monitor","description":"Enable a previously disabled monitor to resume its scheduled runs.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"get_dataset","title":"Get Dataset","description":"Get a single dataset's details.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"get_dataset_status","title":"Get Dataset Status","description":"Get the status history of a dataset (e.g. its enrichment progress over time).","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"get_entity","title":"Get Entity","description":"Get a single entity's details.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"get_job_status","title":"Get Job Status","description":"Check the status of a submitted job.\n\nCall this after submit_query to see if your job is ready.\nStatus progression: submitted -> analyzing -> fetching -> clustering -> enriching -> completed/failed\n\nIMPORTANT: Jobs take several minutes to process.\nFirst check after ~1-2 minutes, then poll every 30-60 seconds.\nBroad searches can take 10-30+ minutes; for long jobs, poll every 60-120 seconds.\nDo NOT call this tool in a tight loop.\nStop polling when status is `completed` or `failed`.\nTreat `submitted`, `analyzing`, `fetching`, `clustering`, and `enriching`\nas active states and continue polling.\n\nYou don't need to wait for completion to pull results. Partial results are\navailable during `enriching` — call pull_results after ~2 minutes, then\npoll status every 30-60 seconds and pull again for fresher results.\nDo not stop pulling just because an intermediate pull is empty/unchanged.\nUse `progress_validated` vs `candidate_records` to track whether more\nresults may still appear (`progress_validated < candidate_records`).\nIf transport/session fails, resume using the same `job_id`.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"get_monitor_status","title":"Get Monitor Status","description":"Get the status history of a monitor.\n\nUse when:\n- You want to see the timeline of a monitor's state changes (e.g. active,\n  disabled, errored) and any related details.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"get_project","title":"Get Project","description":"Get a single project's details.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"get_project_overview","title":"Get Project Overview","description":"Get a project's resource overview (counts grouped by resource type and status).","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"get_user_limits","title":"Get User Limits","description":"Retrieve plan features and current usage limits for your API key.\n\nUse when:\n- You want to know how many records/jobs/monitors your plan allows.\n- You want to check current usage against plan limits before running a large job.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"get_version","title":"Get Version","description":"Get current API version.\n\nThis tool maps to GET /version and does not require an API key.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"get_webhook","title":"Get Webhook","description":"Retrieve the full configuration of a specific webhook.\n\nUse when:\n- You want to inspect a webhook's URL, method, headers, or status by its ID.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"get_webhook_history","title":"Get Webhook History","description":"Get webhook delivery history, either for a resource or for a webhook.\n\nQuery in exactly one of two modes:\n- By resource: pass `resource_type` + `resource_id` to see deliveries made\n  for a specific job/monitor/monitor_group.\n- By webhook: pass `webhook_id` to see every delivery made through one\n  webhook — including manual test deliveries (from `test_webhook`), which\n  are not tied to a job or monitor and only appear in this mode.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"initialize_query","title":"Initialize Query","description":"Preview suggested validators, enrichments, and date ranges before submitting.\n\nUse when:\n- You want to inspect/edit auto-generated validators/enrichments before submitting.\n- You want to preview date adjustments via `date_modification_message`.\n\nDo not use when:\n- You want to start processing immediately with final inputs (use `submit_query`).\n\nKey behavior:\n- Preview-only endpoint: does not create a job and does not start processing.\n- Suggestions are LLM-generated and not deterministic across calls.\n- To reuse suggestions, pass them explicitly to `submit_query`.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"list_dataset_entities","title":"List Dataset Entities","description":"List the entities contained in a dataset.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"list_datasets","title":"List Datasets","description":"List your datasets.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"list_entities","title":"List Entities","description":"List your entities.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"list_monitor_jobs","title":"List Monitor Jobs","description":"List all jobs spawned by a monitor.\n\nReturns the history of scheduled runs for a monitor.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"list_monitors","title":"List Monitors","description":"List all your monitors.\n\nReturns all monitors with their schedule, status, reference query, and webhook config.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"list_project_resources","title":"List Project Resources","description":"List the resources contained in a project.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"list_projects","title":"List Projects","description":"List your projects.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"list_resource_webhooks","title":"List Resource Webhooks","description":"List the webhooks mapped to a specific resource (job/monitor/monitor_group).\n\nUse when:\n- You have a job or monitor ID and want to know which webhooks will fire for it.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"list_source_groups","title":"List Source Groups","description":"List source groups (named domain allowlists).\n\nUse when:\n- You want to discover reusable, named sets of source domains (public groups\n  plus any organization-visibility groups your organization can access).\n- You need a group's `slug` to attach to `submit_query` via `source_groups`\n  to scope fetching to that domain allowlist.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"list_user_jobs","title":"List User Jobs","description":"List all jobs submitted by you.\n\nReturns your job history with IDs, queries, statuses, and timestamps.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"list_webhook_resources","title":"List Webhook Resources","description":"List the resources mapped to a webhook.\n\nUse when:\n- You want to see which jobs/monitors a webhook is attached to.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"list_webhooks","title":"List Webhooks","description":"List all your webhooks.\n\nUse when:\n- You want to see all webhook endpoints configured in your account.\n- You need to find a webhook_id to pass to monitors (via webhook_ids) or jobs.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"pull_job_csv","title":"Pull Job Csv","description":"Download a job's results as a CSV file.\n\nUse when:\n- You want the full job output as a CSV for offline analysis or export.\n- Prefer this over `pull_results` when the consumer needs spreadsheet/CSV format.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"pull_monitor_csv","title":"Pull Monitor Csv","description":"Download the latest monitor run's results as a CSV file.\n\nUse when:\n- You want the most recent monitor run output as a CSV for offline analysis or export.\n- Prefer this over `pull_monitor_results` when the consumer needs spreadsheet/CSV format.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"pull_monitor_results","title":"Pull Monitor Results","description":"Retrieve the latest results from a monitor.\n\nReturns the most recent run's results including run_info, records, and all_records.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"pull_results","title":"Pull Results","description":"Retrieve the results of a job.\n\nCan be called before completion for partial results, or after completion\nfor the full set. Returns clustered, validated, and enriched web results.\nWhile job status is active, call this repeatedly (typically page=1) to\nrefresh partial output. When job reaches completed, iterate all pages.\nIf job fails, call once more to capture any partial output.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"remove_dataset_entities","title":"Remove Dataset Entities","description":"Remove entities from a dataset (the entities themselves are not deleted).","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"remove_project_resource","title":"Remove Project Resource","description":"Remove a single resource from a project.\n\nThis detaches the resource from the project without deleting the resource\nitself (e.g. removing a webhook only ends its membership in this project;\nthe webhook keeps existing and stays attached to any other projects).","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"remove_webhook_resource","title":"Remove Webhook Resource","description":"Unmap a resource from a webhook.\n\nUse when:\n- You want to stop a webhook from firing for a specific job or monitor.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"submit_query","title":"Submit Query","description":"Create a new CatchAll processing job from a natural-language query.\n\nUse when:\n- You want to start a new CatchAll web research run from a user query.\n- You want the API to fetch/process sources and then return structured results.\n\nDo not use when:\n- You want status for an existing job (use `get_job_status`).\n- You want records for an existing job (use `pull_results`).\n\nKey rules:\n- `query` is required.\n- You can submit with only `query`; omitted optional fields (`validators`, `enrichments`, `start_date`, `end_date`) are auto-selected/generated by the API.\n- Optional fields are independent: you can pass any subset (for example, custom `validators` but no `enrichments`), and omitted fields are still auto-selected/generated.\n- When `connected_dataset_ids` is set, the `query` must describe the **topic or event type only**\n  (e.g. \"M&A activity\", \"regulatory filings\", \"executive changes\"). Do NOT write things like\n  \"for my companies\", \"for the selected list of companies\", or \"news about my watchlist\" — the\n  entity filtering is applied automatically by the connected dataset. Mentioning companies in\n  the query when a dataset is attached is redundant and degrades retrieval quality.\n- When `connected_dataset_ids` is set, entity-relevance validators (e.g.\n  `company_is_primary_subject`) are generated automatically by the API. Do NOT add them\n  manually to `validators` — they are redundant and may conflict with the auto-generated ones.\n  Only pass validators that describe the **event or topic**, not entity filtering.\n- `start_date` and `end_date` filter by web page discovery date, not event date.\n- Discovery dates and extracted event dates can differ. For event-time accuracy, use event-focused validators/enrichments and verify `event_date` in pulled results.\n- `end_date` must be after `start_date`.\n- Dates outside your plan lookback limits return API 400.\n- `limit` controls processed record count (cost-affecting). Omit it to retrieve everything\n  up to your plan's maximum. If provided, must be >= 10.\n- `validators` / `enrichments` may be passed either as arrays or as JSON-string arrays (for client compatibility).\n- `validators[].type` must be `boolean` (if omitted, it defaults to `boolean`).\n- `enrichments[].type` supported values: text, number, date, option, url, company.\n\nBasic examples:\n- validators:\n  `[{\"name\":\"is_acquisition_event\",\"description\":\"true if page describes an acquisition\",\"type\":\"boolean\"}]`\n- enrichments:\n  `[{\"name\":\"acquiring_company\",\"description\":\"Extract acquiring company\",\"type\":\"company\"},{\"name\":\"deal_value\",\"description\":\"Extract announced deal value\",\"type\":\"number\"}]`\n\nNext step:\n- Save the returned `job_id`.\n- Poll `get_job_status` and call `pull_results` (partial results can appear before completion).","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"test_webhook","title":"Test Webhook","description":"Send a test delivery to a webhook endpoint.\n\nUse when:\n- You want to verify a webhook URL is reachable and correctly configured\n  before attaching it to a monitor or job.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"trigger_webhook","title":"Trigger Webhook","description":"Manually trigger webhook delivery for a resource (job/monitor/monitor_group).\n\nUse when:\n- You want to (re-)send a webhook delivery on demand instead of waiting for\n  the automatic dispatch — e.g. to replay a missed or failed delivery.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"update_dataset","title":"Update Dataset","description":"Update a dataset's name and/or description.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"update_entity","title":"Update Entity","description":"Update an entity's name, description, external_entity_id, and/or attributes.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"update_monitor","title":"Update Monitor","description":"Update a monitor's schedule, timezone, webhook assignments, and per-run limit.\n\nNote: reference_job_id cannot be modified through this endpoint.\nWebhooks are centralized — pass webhook IDs (from `create_webhook`/`list_webhooks`).","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"update_project","title":"Update Project","description":"Update a project's name and/or description.\n\nOnly the fields you provide are changed.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"update_webhook","title":"Update Webhook","description":"Update an existing webhook's configuration.\n\nUse when:\n- You want to change a webhook's URL, method, headers, or other settings.\n- You want to enable or disable a webhook (set `is_active`).\n- Only the fields you provide are updated; omitted fields remain unchanged.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"},{"name":"validate_query","title":"Validate Query","description":"Check the quality of a query before submitting a job (\"Check Query Quality\").\n\nUse when:\n- You want quick feedback on whether a query is well-formed for CatchAll\n  before spending credits on a job.\n- You want concrete suggestions to improve a vague or overly broad query.\n\nDo not use when:\n- You want to preview auto-generated validators/enrichments (use `initialize_query`).\n- You want to actually run a search (use `submit_query`).","annotations":null,"source":"probe","observed_at":"2026-10-19T21:45:26.652Z"}],"dev.protogrid/trust":{"score":86,"components":{"hygiene":100,"liveness":100,"freshness":65,"provenance":75},"drivers":["+repository","+dns-namespace","+reachable","+uptime-100%","~updated-98d-ago"],"flags":[],"blocked":false,"computed_at":"2026-10-20T01:09:23.032Z","disclaimer":"Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed."},"dev.protogrid/quality":{"score":71,"label":"needs work","components":{"auth":null,"hygiene":43,"protocol":88,"stability":100,"dependencies":null},"checks":[{"id":"protocol.modern","detail":"supports 2026-07-28 (server/discover)","status":"pass","category":"protocol"},{"id":"protocol.stateless","detail":"answers without a session","status":"pass","category":"protocol"},{"id":"protocol.transport","detail":"streamable HTTP","status":"pass","category":"protocol"},{"id":"protocol.list_ttl","detail":"tools/list declares ttlMs 0, so clients re-fetch it on every use","status":"warn","category":"protocol"},{"id":"auth.prm","detail":"no remote uses OAuth","status":"na","category":"auth"},{"id":"auth.as_metadata","detail":"no remote uses OAuth","status":"na","category":"auth"},{"id":"auth.cimd","detail":"no remote uses OAuth","status":"na","category":"auth"},{"id":"auth.secret_in_url","detail":"no templated URL","status":"na","category":"auth"},{"id":"tools.descriptions","detail":"3 of 61 tools have a description under 20 characters","status":"warn","category":"hygiene"},{"id":"tools.description_length","detail":"2 tools have descriptions over 1,024 characters, which crowds the context","status":"warn","category":"hygiene"},{"id":"tools.schemas","detail":"every tool has an object input schema","status":"pass","category":"hygiene"},{"id":"tools.annotations","detail":"no tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones","status":"fail","category":"hygiene"},{"id":"tools.directory_hints","detail":"no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: initialize_query (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); list_monitors (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); update_monitor (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …","status":"fail","category":"hygiene"},{"id":"tools.token_cost","detail":"about 14,143 tokens to load every tool","status":"warn","category":"hygiene"},{"id":"tools.api_dump","detail":"61 tools, 75% named like REST operations: looks like an API mapped one endpoint per tool","status":"warn","category":"hygiene"},{"id":"stability.changes","detail":"no tool changes in 30 days","status":"pass","category":"stability"},{"id":"stability.rug_pull","detail":"no tool changed its meaning under the same name","status":"pass","category":"stability"},{"id":"deps.known_vulns","detail":"no npm or PyPI package","status":"na","category":"dependencies"},{"id":"deps.mcp_sdk_version","detail":"no npm or PyPI package","status":"na","category":"dependencies"},{"id":"deps.resolvable","detail":"no npm or PyPI package","status":"na","category":"dependencies"}],"drivers":["-tools.annotations","-tools.directory_hints","~protocol.list_ttl","~tools.descriptions","~tools.description_length","~tools.token_cost","~tools.api_dump"],"flags":[],"tool_count":61,"token_estimate":14143,"tools_hash":"a0998404264f79a08034af5ef2961753","tools_changed_at":null,"computed_at":"2026-10-20T01:29:05.231Z","disclaimer":"Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed."},"dev.protogrid/identity":{"canonical_id":"com.newscatcherapi/catchall","aliases":[],"alias_count":0,"repository_key":"github:newscatcher/catchall-mcp","owner":{"verified":false,"method":null,"since":null}}},"next_actions":[{"action":"list_tools","description":"Every current tool with input schemas","href":"/v1/servers/com.newscatcherapi%2Fcatchall/tools","arguments":{"name":"com.newscatcherapi/catchall"}},{"action":"get_connection","description":"Minimal connection block for the preferred remote or package","href":"/v1/servers/com.newscatcherapi%2Fcatchall/connection?target=mcpServers","arguments":{"name":"com.newscatcherapi/catchall","target":"mcpServers"}},{"action":"search","description":"Find other servers by intent","href":"/v1/search?q={query}","arguments":{"q":"{query}"}}]}