Install
openclaw skills install content-research-mcbaiResearch and discover trending content sources for any topic using web search. Use this skill whenever the user wants to find articles, news, blog posts, or...
openclaw skills install content-research-mcbainpx clawhub@latest install content-research-mcbai
Search the web for trending articles, news, and content sources on any topic. This skill powers the MCB AI content research pipeline — finding, filtering, scoring, and organizing source material for content creation.
This skill uses TWO search providers in parallel for maximum coverage:
web_search tool (built-in OpenClaw tool)TAVILY_API_KEY from ~/.openclaw/.envPOST https://api.tavily.com/search
Headers: Content-Type: application/json
Body:
{
"api_key": "<TAVILY_API_KEY>",
"query": "<query>",
"search_depth": "advanced",
"include_answer": false,
"include_raw_content": false,
"max_results": 10,
"topic": "news" // use "general" for non-news searches
}
Run Tavily via exec with PowerShell:
$body = @{
api_key = $env:TAVILY_API_KEY
query = "<query>"
search_depth = "advanced"
include_answer = $false
include_raw_content = $false
max_results = 10
topic = "news"
} | ConvertTo-Json
Invoke-RestMethod -Uri "https://api.tavily.com/search" -Method Post -ContentType "application/json" -Body $body
web_search) and Tavily in parallelExtract from the user's message:
all — All web sourcesnews — News publications onlylinkedin — LinkedIn posts/articles (append site:linkedin.com)youtube — YouTube videos (append site:youtube.com)blogs — Blog posts and articles (append blog OR article OR guide)If the user doesn't specify these, use sensible defaults and mention what you chose.
Run BOTH providers. Each provider runs TWO queries when possible.
Query 1 — Web:
Query: {topic} {source_filter_query}
count: 10
freshness: month
Query 2 — News:
Query: {topic} news
count: 10
freshness: week
Query 1 — General:
$env:TAVILY_API_KEY = (Get-Content "$env:USERPROFILE\.openclaw\.env" | Select-String "TAVILY_API_KEY" | ForEach-Object { $_ -replace "TAVILY_API_KEY=", "" })
$body = @{
api_key = $env:TAVILY_API_KEY.Trim()
query = "{topic}"
search_depth = "advanced"
include_answer = $false
include_raw_content = $false
max_results = 10
topic = "general"
} | ConvertTo-Json
Invoke-RestMethod -Uri "https://api.tavily.com/search" -Method Post -ContentType "application/json" -Body $body
Query 2 — News:
# Same as above but topic = "news"
[Brave] or [Tavily]For each result, extract and structure:
Article:
- Title: [article title]
- Source: [publication/website name]
- URL: [full URL]
- Date: [relative date, e.g. "2 hours ago", "3 days ago"]
- Summary: [description/snippet from search]
- Type: [News / Blog / Report / Video / LinkedIn]
- Tag: [auto-detected tag, see Tag Rules below]
- Engine: [Brave / Tavily / Both]
Clean the hostname to a readable name:
www. prefix.com, .org, .net, .io, .co suffixesScan title + summary and apply the FIRST matching tag:
| Tag | Pattern Keywords |
|---|---|
| Funding | fund, raise, round, series A-C, seed, valuation, invest, VC, venture |
| AI | ai, artificial intelligence, machine learning, LLM, GPT, Claude, OpenAI |
| SaaS | saas, software as a service, subscription, ARR, MRR |
| Tools | tool, platform, app, software, stack, framework |
| Trends | trend, report, survey, data, statistic, forecast, prediction |
| Startup | startup, founder, launch, accelerator, incubator, YC |
| Growth | growth, marketing, GTM, acquisition, retention, conversion |
Present the organized results in a clear, scannable format:
## Research Results: "{topic}"
Found {N} articles from {sources_count} sources
Sources: Brave ({brave_count}) + Tavily ({tavily_count}) → merged {total} unique
### 📰 News
1. **{title}** — {source} ({date}) [{engine}]
{summary}
🏷️ {tag} | 🔗 {url}
### 📝 Articles & Blogs
2. **{title}** — {source} ({date}) [{engine}]
{summary}
🏷️ {tag} | 🔗 {url}
...
Then ask the user which articles they want to use for content creation. If the user wants to proceed to writing, hand off to the content-writer skill with the selected articles.
Always provide results as a numbered list with:
search_depth: "advanced" digs deeper — use for complex topicsAfter research, the user typically selects articles and moves to writing. Pass the selected articles to the content-writer skill in this format:
{
"articles": [
{
"title": "Article title",
"source": "Publication name",
"url": "https://...",
"date": "2 days ago",
"summary": "Brief description",
"tag": "AI",
"engine": "Tavily"
}
]
}
See references/source-filters.md for detailed source filter configurations.