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.

Stars 381
Forks 34

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)

python
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

python
# 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).

python
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).

python
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.

python
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:

python
# 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:

python
# 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_raw is the Python SDK entry point for Exa (no dedicated method yet)

Expand your agent's capabilities with these related and highly-rated skills.

Didn't find tool you were looking for?

Be as detailed as possible for better results