Read niche briefings, research news, and explore sourced story angles with your assistant.
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.
Angles on one story (Pro): up to a few distinct stances a reader could take, each with a hook, the take, and the sources that support it. Pass the session_id from a scan and a story_id from its slate. Nothing is written for you; the angles are starting points.
id from niche_session_state.stories[].id
Optional direction for a regenerated angle set, such as focus on the evidence.
Request another set of angles after the selected story's angles are ready. Subject to the account's allowance.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Angles on one story (Pro): up to a few distinct stances a reader could take, each with a hook, the take, and the sources that support it. Pass the session_id from a scan and a story_id from its slate. Nothing is written for you; the angles are starting points.
| Argument | Type | Description |
|---|---|---|
| lens | string | Optional direction for a regenerated angle set, such as focus on the evidence. |
| story_id* | string | id from niche_session_state.stories[].id |
| regenerate | boolean | Request another set of angles after the selected story's angles are ready. Subject to the account's allowance. |
| session_id* | string |
{
"type": "object",
"required": [
"session_id",
"story_id"
],
"properties": {
"lens": {
"type": "string",
"description": "Optional direction for a regenerated angle set, such as focus on the evidence."
},
"story_id": {
"type": "string",
"description": "id from niche_session_state.stories[].id"
},
"regenerate": {
"type": "boolean",
"description": "Request another set of angles after the selected story's angles are ready. Subject to the account's allowance."
},
"session_id": {
"type": "string"
}
},
"additionalProperties": false
}Read the latest or a dated briefing for a niche: stories, reporting dates, source links, why each story matters, and new or continuing status. Use a slug from https://nicheangle.com/n or a custom niche's URL, such as founders or ai-leaders. Assistant access requires Pro. This reads an existing briefing without starting a scan. A quiet briefing has status=quiet; no_edition means no briefing is available; unknown_niche means the slug was not found.
| Argument | Type | Description |
|---|---|---|
| date | string | Optional edition date, YYYY-MM-DD. Default: the latest edition. |
| niche* | string | Niche slug, e.g. financial-advisors. |
{
"type": "object",
"required": [
"niche"
],
"properties": {
"date": {
"type": "string",
"description": "Optional edition date, YYYY-MM-DD. Default: the latest edition."
},
"niche": {
"type": "string",
"description": "Niche slug, e.g. financial-advisors."
}
}
}Ask an analyst-shaped question over a fresh scan of a niche (Pro): 'the biggest developments this week', 'what is emerging', 'where money is moving'. Returns the sourced slate plus a short synthesis when requested. Returns a session_id; poll niche_session_state until cp1_awaiting_story. For synthesis, continue polling with wait_until=synthesis and wait=30 until it arrives or a shortfall is reported.
| Argument | Type | Description |
|---|---|---|
| lens | string | mainstream covers established reporting, emerging emphasizes newer topics, and investment focuses on funding developments. |
| count | integer | Requested number of developments, from 3 to 15. The result can contain fewer when reporting is limited. |
| window | string | Reporting window: 24h, week, month, quarter, or year. Pair with recency_strict for a hard cutoff. |
| subject* | string | The subject/space to investigate (2-200 chars). Specific is better. |
| synthesis | string | none returns stories only. narratives adds sourced themes across the stories. patterns adds a summary of broader developments. Default none. |
| recency_strict | boolean | Exclude reporting outside the requested window. Default false; strict windows can return fewer stories. |
| source_quality | string |
List your recent scans: id, the niche you described, status and timestamps. Use it to find a session_id you no longer have.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max sessions to return (default 25, max 100). |
| offset | integer | Skip this many sessions before returning, for paging through history. Default 0. |
| status_filter | string | Optional scan status, such as cp1_awaiting_story, cp2_awaiting_angle, complete, or failed. |
| niche_contains | string | Optional case-insensitive substring filter on the niche input, to find sessions on a topic (e.g. 'walnut'). |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"default": 25,
"maximum": 100,
"minimum": 1,
"description": "Max sessions to return (default 25, max 100)."
},
"offset": {
"type": "integer",
"default": 0,
"minimum": 0,
"description": "Skip this many sessions before returning, for paging through history. Default 0."
},
"status_filter": {
"type": "string",
"description": "Optional scan status, such as cp1_awaiting_story, cp2_awaiting_angle, complete, or failed."
},
"niche_contains": {
"type": "string",
"description": "Optional case-insensitive substring filter on the niche input, to find sessions on a topic (e.g. 'walnut')."
}
},
"additionalProperties": false
}Cancel a scan that is still running.
| Argument | Type | Description |
|---|---|---|
| reason | string | Optional. Surfaced as session.error_message. |
| session_id* | string |
{
"type": "object",
"required": [
"session_id"
],
"properties": {
"reason": {
"type": "string",
"description": "Optional. Surfaced as session.error_message."
},
"session_id": {
"type": "string"
}
},
"additionalProperties": false
}Read the current state of a scan: status, the ranked stories with their sources and source information, and any angles already proposed. Poll this after niche_signal_scan or niche_intelligence_query until the slate is ready.
| Argument | Type | Description |
|---|---|---|
| view | string | status returns a short progress summary. full returns the stories and available angles. Default full. |
| wait | integer | Wait up to 30 seconds for progress, then return the current state. Default 0. |
| wait_for | string | Alias for wait_until. If both are supplied, wait_until takes precedence. |
| session_id* | string | session_id from niche_signal_scan. |
| wait_until | string | With wait, return on change, an actionable checkpoint, or completion of synthesis. |
| since_status | string | Last status received. With wait and wait_until=change, return when it changes. |
| include_unpicked | boolean | When true, return the full candidate set even after picks have been made. Default false (sparse: only the picked story / angle come back). Meaningful only with view='full'; ignored in view='status' (the lean envelope never carries the candidate slate). |
Scan a niche you describe, right now (Pro). Returns a ranked, sourced slate of the stories people in that field are talking about, with source links, the outlets, and why it matters. For a ready-made briefing use niche_feed_read instead. Assistant access requires Pro. Poll niche_session_state with the returned session_id until status is cp1_awaiting_story; the slate is in `stories`.
| Argument | Type | Description |
|---|---|---|
| niche* | string | Niche / beat description (2-200 chars). Specific is better. |
| recency | string | Reporting window: 24h, week, month, quarter, or year. Pair with recency_strict for a hard cutoff. |
| recency_strict | boolean | Exclude reporting outside the requested window. Default false; strict windows can return fewer stories. |
| source_quality | string | strict prioritizes well-supported stories; balanced is the default; broad includes less-established reporting. Inspect the returned sources before relying on a claim. |
| idempotency_key | string | Optional stable key for retries of the same scan, so a retry reuses the original run. |
| thinking_budget | string | balanced returns a session_id immediately. fast waits briefly for stories and returns them if ready; otherwise poll niche_session_state. |
Orient in one read-only call: your plan (Free or Pro), the tools this server serves, and the endpoint. Assistant access requires Pro. Call it first if you are unsure what is available.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}| strict prioritizes well-supported stories; balanced is the default; broad includes less-established reporting. Inspect the returned sources before relying on a claim. |
| idempotency_key | string | Optional stable key for retries of the same scan, so a retry reuses the original run. |
{
"type": "object",
"required": [
"subject"
],
"properties": {
"lens": {
"enum": [
"mainstream",
"emerging",
"investment"
],
"type": "string",
"description": "mainstream covers established reporting, emerging emphasizes newer topics, and investment focuses on funding developments."
},
"count": {
"type": "integer",
"maximum": 15,
"minimum": 3,
"description": "Requested number of developments, from 3 to 15. The result can contain fewer when reporting is limited."
},
"window": {
"type": "string",
"description": "Reporting window: 24h, week, month, quarter, or year. Pair with recency_strict for a hard cutoff."
},
"subject": {
"type": "string",
"maxLength": 200,
"minLength": 2,
"description": "The subject/space to investigate (2-200 chars). Specific is better."
},
"synthesis": {
"enum": [
"none",
"narratives",
"patterns"
],
"type": "string",
"description": "none returns stories only. narratives adds sourced themes across the stories. patterns adds a summary of broader developments. Default none."
},
"recency_strict": {
"type": "boolean",
"description": "Exclude reporting outside the requested window. Default false; strict windows can return fewer stories."
},
"source_quality": {
"enum": [
"strict",
"balanced",
"broad"
],
"type": "string",
"default": "balanced",
"description": "strict prioritizes well-supported stories; balanced is the default; broad includes less-established reporting. Inspect the returned sources before relying on a claim."
},
"idempotency_key": {
"type": "string",
"description": "Optional stable key for retries of the same scan, so a retry reuses the original run."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"session_id"
],
"properties": {
"view": {
"enum": [
"status",
"full"
],
"type": "string",
"default": "full",
"description": "status returns a short progress summary. full returns the stories and available angles. Default full."
},
"wait": {
"type": "integer",
"default": 0,
"maximum": 30,
"minimum": 0,
"description": "Wait up to 30 seconds for progress, then return the current state. Default 0."
},
"wait_for": {
"enum": [
"change",
"checkpoint",
"synthesis"
],
"type": "string",
"description": "Alias for wait_until. If both are supplied, wait_until takes precedence."
},
"session_id": {
"type": "string",
"description": "session_id from niche_signal_scan."
},
"wait_until": {
"enum": [
"change",
"checkpoint",
"synthesis"
],
"type": "string",
"default": "change",
"description": "With wait, return on change, an actionable checkpoint, or completion of synthesis."
},
"since_status": {
"type": "string",
"description": "Last status received. With wait and wait_until=change, return when it changes."
},
"include_unpicked": {
"type": "boolean",
"default": false,
"description": "When true, return the full candidate set even after picks have been made. Default false (sparse: only the picked story / angle come back). Meaningful only with view='full'; ignored in view='status' (the lean envelope never carries the candidate slate)."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"niche"
],
"properties": {
"niche": {
"type": "string",
"maxLength": 200,
"minLength": 2,
"description": "Niche / beat description (2-200 chars). Specific is better."
},
"recency": {
"type": "string",
"description": "Reporting window: 24h, week, month, quarter, or year. Pair with recency_strict for a hard cutoff."
},
"recency_strict": {
"type": "boolean",
"description": "Exclude reporting outside the requested window. Default false; strict windows can return fewer stories."
},
"source_quality": {
"enum": [
"strict",
"balanced",
"broad"
],
"type": "string",
"default": "balanced",
"description": "strict prioritizes well-supported stories; balanced is the default; broad includes less-established reporting. Inspect the returned sources before relying on a claim."
},
"idempotency_key": {
"type": "string",
"description": "Optional stable key for retries of the same scan, so a retry reuses the original run."
},
"thinking_budget": {
"enum": [
"fast",
"balanced"
],
"type": "string",
"default": "balanced",
"description": "balanced returns a session_id immediately. fast waits briefly for stories and returns them if ready; otherwise poll niche_session_state."
}
},
"additionalProperties": false
}