GRIN-scored news for agents: discover by verdict, pull full analysis, traverse extraction graphs.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Fetch one BedrockNews story by id. Returns the transformed article plus its full structured analysis (GRIN scores, extraction graph, key stats, trajectory, what-to-watch). Pass fields:'grin' to get just the analysis payload without the heavy body text. Story ids contain slashes (e.g. 'ledger/2026/apr/06/iran-war-math-doesnt-work') — pass them verbatim.
The story id, verbatim (ids contain slashes)
Optional projection: 'grin' for the analysis-only view
Fetch one BedrockNews story by id. Returns the transformed article plus its full structured analysis (GRIN scores, extraction graph, key stats, trajectory, what-to-watch). Pass fields:'grin' to get just the analysis payload without the heavy body text. Story ids contain slashes (e.g. 'ledger/2026/apr/06/iran-war-math-doesnt-work') — pass them verbatim.
| Argument | Type | Description |
|---|---|---|
| id* | string | The story id, verbatim (ids contain slashes) |
| fields | string | Optional projection: 'grin' for the analysis-only view |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The story id, verbatim (ids contain slashes)"
},
"fields": {
"type": "string",
"description": "Optional projection: 'grin' for the analysis-only view"
}
}
}Return a story's extraction map as a real graph — nodes + edges data, not a picture. This is the load-bearing artifact for agents: re-render it in any style, or analyze who extracts value from whom. 'Not found' can mean the story has no graph (culture/research modes, or older transforms).
| Argument | Type | Description |
|---|---|---|
| id* | string | The story id, verbatim (ids contain slashes) |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The story id, verbatim (ids contain slashes)"
}
}
}Related BedrockNews stories for a given article — same section, ranked by editorial-mode match, plumb, source affinity, and recency.
| Argument | Type | Description |
|---|---|---|
| id* | string | The source story id |
| limit | number | Max related stories (default 4, max 12) |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The source story id"
},
"limit": {
"type": "number",
"description": "Max related stories (default 4, max 12)"
}
}
}BedrockNews metadata: what the site is, how the GRIN/CLAIMS/NOVEL frameworks work, terms of use + attribution, and every machine-readable surface. Also returns the full capability map (every tool, prompt, and resource) — call this first.
No arguments.
{
"type": "object",
"properties": {}
}The BedrockNews category taxonomy: ids (valid values for list_stories' category filter), display names, and which editorial framework each category runs (grin | culture | auto).
No arguments.
{
"type": "object",
"properties": {}
}Discover BedrockNews stories with GRIN-aware filters. Filter by verdict ('extractive' | 'mixed' | 'generative'), plumb range (0-100 analytical-clarity score), editorialMode ('grin' news/politics | 'culture' | 'research' | 'ledger'), category (see list_categories), date window (since/before, ISO 8601), or a title search (substring match on titles, not full text). Sorted newest first; paginated via cursor. Returns compact story briefs — use get_article for full analysis.
| Argument | Type | Description |
|---|---|---|
| limit | number | Max results (default 15, max 50) |
| query | string | Optional title search (substring match) |
| since | string | Only stories published at/after this ISO 8601 date |
| before | string | Only stories published before this ISO 8601 date |
| cursor | string | Opaque pagination cursor from a previous call |
| verdict | string | GRIN verdict filter, derived from grinScores.extractive |
| category | string | Category id filter (e.g. 'politics', 'research') |
| plumbMax | number |
| Maximum plumb (0-100) |
| plumbMin | number | Minimum plumb (0-100) |
| editorialMode | string | Filter to one editorial framework |
{
"type": "object",
"properties": {
"limit": {
"type": "number",
"description": "Max results (default 15, max 50)"
},
"query": {
"type": "string",
"description": "Optional title search (substring match)"
},
"since": {
"type": "string",
"description": "Only stories published at/after this ISO 8601 date"
},
"before": {
"type": "string",
"description": "Only stories published before this ISO 8601 date"
},
"cursor": {
"type": "string",
"description": "Opaque pagination cursor from a previous call"
},
"verdict": {
"enum": [
"extractive",
"mixed",
"generative"
],
"type": "string",
"description": "GRIN verdict filter, derived from grinScores.extractive"
},
"category": {
"type": "string",
"description": "Category id filter (e.g. 'politics', 'research')"
},
"plumbMax": {
"type": "number",
"description": "Maximum plumb (0-100)"
},
"plumbMin": {
"type": "number",
"description": "Minimum plumb (0-100)"
},
"editorialMode": {
"enum": [
"grin",
"culture",
"research",
"ledger"
],
"type": "string",
"description": "Filter to one editorial framework"
}
}
}