Agent skill
exa-research
Use when researching products, finding academic papers, discovering competitors, reading webpage content, or getting cited answers grounded in real web sources. Use over generic search when semantic relevance matters.
Install this agent skill to your Project
npx add-skill https://github.com/BlockRunAI/blockrun-mcp/tree/main/skills/exa-research
SKILL.md
Exa Research
Neural web search via BlockRun. Understands meaning, not keywords. Four distinct actions for different research modes.
Quick Decision Table
| User wants... | Action | Cost |
|---|---|---|
| Relevant URLs on a topic | search |
$0.01/call |
| Cited answer to a question | answer |
$0.01/call |
| Full text of URLs | contents |
$0.002/URL |
| Pages like a given URL | similar |
$0.01/call |
| Recent news | search + category="news" |
$0.01/call |
| Academic papers | search + category="research paper" |
$0.01/call |
| Company info | search + category="company" |
$0.01/call |
Instructions
1. Initialize (Python SDK)
from blockrun_llm import setup_agent_wallet
chain = open(os.path.expanduser("~/.blockrun/.chain")).read().strip() if os.path.exists(os.path.expanduser("~/.blockrun/.chain")) else "base"
if chain == "solana":
from blockrun_llm import setup_agent_solana_wallet
client = setup_agent_solana_wallet()
else:
from blockrun_llm import setup_agent_wallet
client = setup_agent_wallet()
2. Search — Find Relevant URLs
# Basic search
result = client._request_with_payment_raw("/v1/exa/search", {
"query": "AI agent frameworks 2025",
"numResults": 10,
})
for r in result.get("results", []):
print(f"{r['title']} — {r['url']}")
# Filter by category
result = client._request_with_payment_raw("/v1/exa/search", {
"query": "transformer architecture improvements",
"numResults": 10,
"category": "research paper",
})
# Restrict to specific domains
result = client._request_with_payment_raw("/v1/exa/search", {
"query": "prediction market regulation",
"numResults": 10,
"includeDomains": ["reuters.com", "bloomberg.com", "wsj.com"],
})
Categories: "news", "research paper", "company", "tweet", "github", "pdf"
3. Answer — Cited, Grounded Response
Use when the user asks a factual question and needs reliable sources (not Claude's training data).
result = client._request_with_payment_raw("/v1/exa/answer", {
"query": "What is the current market cap of Polymarket?",
})
print(result.get("answer", ""))
for c in result.get("citations", []):
print(f" [{c.get('title')}] {c.get('url')}")
4. Contents — Fetch URL Text
Use when you have URLs and need their full text for LLM context (scraping without a browser).
urls = [
"https://example.com/article-1",
"https://example.com/article-2",
]
result = client._request_with_payment_raw("/v1/exa/contents", {
"urls": urls,
})
for item in result.get("results", []):
print(f"=== {item['url']} ===")
print(item.get("text", "")[:500])
Up to 100 URLs per call. Returns Markdown-ready text.
5. Similar — Find Related Pages
Use to discover competitors, related research, or sites with similar content.
result = client._request_with_payment_raw("/v1/exa/find-similar", {
"url": "https://polymarket.com",
"numResults": 10,
})
for r in result.get("results", []):
print(f"{r['title']} — {r['url']}")
Common Research Workflows
Competitor discovery:
# 1. Find similar companies
similar = client._request_with_payment_raw("/v1/exa/find-similar", {"url": "https://target-company.com", "numResults": 15})
urls = [r["url"] for r in similar.get("results", [])]
# 2. Fetch their about pages
contents = client._request_with_payment_raw("/v1/exa/contents", {"urls": urls[:10]})
Research synthesis:
# 1. Find papers
papers = client._request_with_payment_raw("/v1/exa/search", {
"query": "your topic",
"category": "research paper",
"numResults": 20,
})
# 2. Get answer with citations
answer = client._request_with_payment_raw("/v1/exa/answer", {
"query": "What are the key findings on your topic?",
})
When to Use Exa vs client.search()
Use blockrun_exa / _request_with_payment_raw |
Use client.search() |
|---|---|
| Finding specific URLs and fetching content | Getting a summarized answer with citations |
| Semantic similarity search | Web + X/Twitter + news combined |
| Academic paper discovery | Cheaper per call for simple lookups |
| Domain-filtered research | Already returns a SearchResult object |
Requirements
- BlockRun SDK:
pip install blockrun-llm - USDC wallet funded (see
client.get_balance()) _request_with_payment_rawis the Python SDK entry point for Exa (no dedicated method yet)
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
prediction-markets
Use when user asks about event probabilities, prediction market odds, what people are betting on, Polymarket or Kalshi prices, or wants to find markets on a specific topic (elections, crypto, sports, macro events).
release
Use this skill for EVERY ClawRouter release. Enforces the full checklist — version sync, CHANGELOG, blockrun server constant, build, tests, npm publish, git tag, GitHub release. No step can be skipped.
x-api
Look up X/Twitter user profiles via BlockRun's API. Trigger when the user asks to look up, find, or get info about X/Twitter users or handles.
predexon
Use this skill — NOT browser or web_fetch — for ALL Polymarket, Kalshi, dFlow, and prediction market data. Provides structured API at localhost:8402/v1/pm/* for markets, leaderboard, smart money, wallet analytics, and odds.
clawrouter
Smart LLM router — save 67% on inference costs. Routes every request to the cheapest capable model across 55+ models from OpenAI, Anthropic, Google, DeepSeek, xAI, NVIDIA, and more. 11 free NVIDIA models included.
imagegen
Generate or edit images via BlockRun's image API. Trigger when the user asks to generate, create, draw, make an image — or to edit, modify, change, or retouch an existing image.
Didn't find tool you were looking for?