dev. scoopkit/ mcp
by scoopkit.dev · remote · no sign-in to list tools · v1.0.0 · published by dev.scoopkit
AI news API: duplicate AI-industry headlines collapse into one structured event.
5 tools: 1 change things and 4 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone0Claude Code: ask
- Changes things1Claude Code: ask: see these tools
- Only reads4Claude Code: allow: see these tools
No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http scoopkit https://api.scoopkit.dev/mcp --header 'x-api-key: <your-x-api-key>'Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
5 tools
Changes things 1Claude Code: ask
request_magic_linkRequest a free API key by email Step 1 of self-serve signup — no key required.No findings
Why it is in this group
- The name "request_magic_link" says "request": a word for a change.
Description, as the server wrote it Request a free API key by email Step 1 of self-serve signup — no key required. Sends a one-time link to `email`; always returns 202 with the same accepted:true body whether or not that address already has a key (prevents account enumeration). **For agents helping a human get set up:** this endpoint is the only step you can call directly. The next step — opening the emailed link and clicking "Reveal my key" on `GET /v1/auth/verify` — **requires a real human click and cannot be automated or done on the human's behalf.** This is intentional: it's what stops email security scanners (e.g. Microsoft Safe Links) from silently consuming the link before the person ever sees it. Tell the human: check your email, open the link, click the button, then paste the key back here. **Not a pollable async job.** This 202 has no `Location`/`job_id` to poll — the next step is a human clicking an emailed link, not a machine checking a status endpoint. ### Responses: **202**: Successful Response (Success Response) Content-Type: application/json **Example Response:** ```json { "accepted": true, "detail": "Detail" } ```
Only reads 4Claude Code: allow
get_eventGet a single event by ID 404s if the event doesn't exist, is unpublished, is beyond your tier's archive window, or was soft-deleted — never distinguishes which, to avoid leaking da…No findings
Why it is in this group
- The name "get_event" says "get": a word for reading.
Description, as the server wrote it Get a single event by ID 404s if the event doesn't exist, is unpublished, is beyond your tier's archive window, or was soft-deleted — never distinguishes which, to avoid leaking data existence beyond what the tier allows. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json **Example Response:** ```json { "data": { "event_id": "Event Id", "schema_version": "Schema Version", "taxonomy_version": "Taxonomy Version", "primary_category": "Primary Category", "subcategory": "Subcategory", "categories": [ "string" ], "type_confidence": 1.0, "headline": "Headline", "summary": "Summary", "reported_at": "2023-01-01T00:00:00Z", "orgs": [ "string" ], "models": [ "string" ], "source_url": "Source Url", "article_count": 1 }, "meta": { "request_id": "Request Id", "taxonomy_version": "Taxonomy Version", "tier": "ApiTier" } } ```
list_eventsList events, newest first The primary resource — one structured event per underlying story, already deduplicated from many source articles.No findings
Why it is in this group
- The name "list_events" says "list": a word for reading.
Description, as the server wrote it List events, newest first The primary resource — one structured event per underlying story, already deduplicated from many source articles. Cursor-paginated (`next_cursor`/`has_more`), newest `reported_at` first. Free tier omits paid-only fields by omission (never null) and excludes paid-primary subcategories entirely; archive depth is 45 days on free, 365 on Pro. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json **Example Response:** ```json { "data": [ { "event_id": "Event Id", "schema_version": "Schema Version", "taxonomy_version": "Taxonomy Version", "primary_category": "Primary Category", "subcategory": "Subcategory", "categories": [ "string" ], "type_confidence": 1.0, "headline": "Headline", "summary": "Summary", "reported_at": "2023-01-01T00:00:00Z", "orgs": [ "string" ], "models": [ "string" ], "source_url": "Source Url", "article_count": 1 } ], "pagination": { "has_more": true, "count": 1 }, "meta": { "request_id": "Request Id", "taxonomy_version": "Taxonomy Version", "tier": "ApiTier" } } ```
searchSemantic search over events (Pro+) Natural-language query embedded and ranked by cosine similarity against published events — not a keyword/text match.No findings
Why it is in this group
- The name "search" says "search": a word for reading.
Description, as the server wrote it Semantic search over events (Pro+) Natural-language query embedded and ranked by cosine similarity against published events — not a keyword/text match. Each result is a normal event object plus `relevance_score` (0-1). Requires Pro tier or above; free-tier keys get 403 with an upgrade_url. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json **Example Response:** ```json { "data": [ { "event_id": "Event Id", "schema_version": "Schema Version", "taxonomy_version": "Taxonomy Version", "primary_category": "Primary Category", "subcategory": "Subcategory", "categories": [ "string" ], "type_confidence": 1.0, "headline": "Headline", "summary": "Summary", "reported_at": "2023-01-01T00:00:00Z", "orgs": [ "string" ], "models": [ "string" ], "source_url": "Source Url", "article_count": 1, "relevance_score": 1.0 } ], "pagination": { "has_more": true, "count": 1 }, "meta": { "request_id": "Request Id", "taxonomy_version": "Taxonomy Version", "tier": "ApiTier" } } ```
taxonomyGet Taxonomy Public taxonomy — no API key required.No findings
Why it is in this group
- The description's first verb is "get": a word for reading.
Description, as the server wrote it Get Taxonomy Public taxonomy — no API key required. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.0.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http scoopkit https://api.scoopkit.dev/mcp --header 'x-api-key: <your-x-api-key>'Run in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__scoopkit__list_events",
"mcp__scoopkit__get_event",
"mcp__scoopkit__search",
"mcp__scoopkit__taxonomy"
],
"ask": [
"mcp__scoopkit__request_magic_link"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as scoopkit. Review it before you use it.