Topical intelligence (MCP)
Topical is continuous intelligence infrastructure: long-lived topics are monitored on a schedule the user configures in Topical (portal or product settings). Each completed pipeline run surfaces breaking news, signals, and trends drawn from ingested sources.
You do not run the pipeline. MCP tools read intelligence that Topical has already produced. When you call get_topic_update or get_topic_narrative, results are current as of the last completed pipeline run for that topic — not live web search. If nothing has changed since the user's last run, responses may be empty even though the wider web has moved on.
Tell the user when their briefing reflects a scheduled snapshot, especially if they expect up-to-the-minute news.
OpenClaw integration
Full wiring (MCP + inbound webhooks) is a separate install flow:
- Portal: Settings → Connect OpenClaw at
https://app.usetopical.com/portal/openclaw/. - ClawHub: topical · topical-openclaw-setup
- Skills:
openclaw skills install @daveangelcode/topical-openclaw-setup --globalthen ask your agent to set up Topical. - Usage skill (this file):
openclaw skills install @daveangelcode/topical --global
Hook transform assets live in {baseDir}/assets/. Payload reference: {baseDir}/references/payloads.md.
Setup (once)
- User creates an Agent API key in the Topical portal (Settings → Agent API keys, or the Connect OpenClaw wizard at
/portal/openclaw/). Keys look likeagt_live_<uuid>_<secret>(~89 chars); the embedded UUID is normal. - Wire MCP (prefer CLI over hand-editing JSON):
openclaw mcp set topical '{"url":"https://app.usetopical.com/api/mcp","transport":"streamable-http","headers":{"Authorization":"Bearer <AGENT_API_KEY>"}}'
openclaw mcp probe topical
openclaw gateway restart
OAuth is for interactive clients; OpenClaw uses the long-lived Bearer token.
For push delivery (digests and event alerts), also complete the topical-openclaw-setup skill: copy {baseDir}/scripts/copy-transforms.sh assets, merge examples/openclaw.hooks.fragment.json5, expose the gateway hook URL, and register that URL in Topical via portal or manage_agent_webhook.
Restart the gateway or start a new session after config changes.
Tools
| Tool | Purpose |
| --- | --- |
| list_topics | List monitored topics (topicId, name). Start here when topic is unknown. |
| get_topic_update | Primary read — breaking news, signals, and trends with source URLs since a checkpoint. |
| get_topic_narrative | Ready-made markdown summary with inline source links. |
| submit_topic_feedback | Steer future relevance: not_relevant or interest on breaking news, a signal, or a trend. |
| list_topic_subscriptions | RSS / YouTube feeds on the topic ingest plan. |
| subscribe_topic_source | Add RSS or YouTube for future runs only. |
| unsubscribe_topic_source | Remove a feed/channel subscription (subscriptionId from list_topic_subscriptions). |
| manage_agent_webhook | Register Topical → agent webhook URL for briefings and breaking-news alerts (get / set / remove). |
| manage_topic_schedule | Read or set the topic's recurring pipeline schedule (weekly, fortnightly, monthly). |
Responses may include next_actions suggesting the next tool to call. Tool text content also includes a JSON block with the same payload as structuredContent for MCP clients (including older OpenClaw) that only read the primary text field.
Recommended workflows
Scheduled briefing (after a pipeline run)
When the user wants "what's new since Topical last ran" (aligned with their schedule):
list_topicsif you needtopicId.get_topic_updatewith{ "topicId": "<topicId from list_topics>", "sinceLastRun": true }.
sinceLastRun uses the latest completed run as the cutoff — the right default for recurring check-ins.
Incremental check (between scheduled runs)
When you already briefed the user and want only new activity:
get_topic_updatewith{ "topicId": "<topicId>", "lastCheckedAt": "<checkpoint>" }.
Save the checkpoint from each get_topic_update response and pass it as lastCheckedAt next time. The response also includes since (the cutoff used) and name (topic label).
Ready-made prose
For a polished markdown summary instead of structuring raw facts yourself:
get_topic_narrativewith{ "topicId": "<topicId>", "lastCheckedAt": "<checkpoint>" }
or passsincefor a time window (defaults to ~7 days), orsinceRunIdto anchor on a specific run.
Use get_topic_update when you need structured breaking news, signals, trends, and URLs to write your own briefing.
Steer monitoring
On breaking news, a signal, or a trend the user cares about (or wants to ignore):
submit_topic_feedbackwithkind: "interest"or"not_relevant", plustargetType(breaking_news,signal, ortrend) andtargetId(breakingNewsId,signalId, ortrendIdfromget_topic_update).
Feedback affects future ingest and ranking, not the current snapshot.
Add a source
subscribe_topic_source(rss_feedwithfeedUrlorsiteUrl, oryoutube_channelwithchannel).- Confirm with
list_topic_subscriptions.
New sources are picked up on the next scheduled run, not immediately.
Configure push delivery
After OpenClaw hooks are wired:
{
"action": "set",
"url": "https://<gateway>/hooks/topical-inbound",
"breakingNewsAlertsEnabled": true,
"briefingEnabled": true,
"bearerToken": "<hooks.token>"
}
Call via manage_agent_webhook. Save the returned signing secret to verify X-Topical-Signature.
Manage schedule
To check or change when Topical runs the pipeline for a topic:
{ "topicId": "<topicId>", "action": "get" }
{
"topicId": "<topicId>",
"action": "set",
"cadence": "weekly",
"dayOfWeek": "Monday",
"timezone": "Europe/London"
}
Use action: "disable" to turn the schedule off.
Response shape (get_topic_update)
- breakingNews — global stories matched to the topic (
breakingNewsId, title, summary, sources withurl+ optionaltitle). - signals — topic-specific signals (
signalId, title, summary, sources). - trends — emerging trends (
trendId, title, summary, sources). - checkpoint — pass as
lastCheckedAton the next call. - since — ISO cutoff used for this response.
Cite source URLs when briefing the user. Empty arrays mean no new intelligence since the cutoff (often since the last run).
Constraints
- Read-only intelligence — no MCP tool triggers ingest; do not tell the user you "searched the web" unless you used a separate search tool.
- Stale relative to the open web — freshness is bounded by the user's Topical schedule and last successful run.
- Subscription scope — tools operate on the authenticated Topical account's topics only.
- Source subscriptions — RSS/YouTube tools change the ingest plan; Brave search queries are configured in Topical and run every ingest.
Example user prompts
| User says | You do |
| --- | --- |
| "What's new on our AI tools topic?" | get_topic_update with sinceLastRun: true |
| "Give me the weekly competitive intel briefing" | get_topic_narrative or get_topic_update + synthesize |
| "Anything since you last told me?" | get_topic_update with saved lastCheckedAt |
| "Stop showing me funding round noise" | submit_topic_feedback with not_relevant on the relevant breaking-news item, signal, or trend |
| "Track this company's blog" | subscribe_topic_source (RSS), note it applies after the next run |
| "Set up Topical webhooks in OpenClaw" | Run topical-openclaw-setup skill; use manage_agent_webhook when MCP works |
微信扫一扫