← 返回 Skills 市场
byungkyu

Exa

作者 byungkyu · GitHub ↗ · v1.0.0 · MIT-0
cross-platform ✓ 安全检测通过
347
总下载
0
收藏
2
当前安装
1
版本数
在 OpenClaw 中安装
/install exa-api
功能描述
Exa API integration with managed API key authentication. Perform neural web search, retrieve page contents, find similar pages, get AI-generated answers, and...
使用说明 (SKILL.md)

Exa

Access the Exa API with managed API key authentication. Perform neural web searches, retrieve page contents, find similar pages, get AI-generated answers with citations, and run async research tasks.

Quick Start

# Search the web
python \x3C\x3C'EOF'
import urllib.request, os, json
data = json.dumps({"query": "latest AI research", "numResults": 5}).encode()
req = urllib.request.Request('https://gateway.maton.ai/exa/search', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

Base URL

https://gateway.maton.ai/exa/{endpoint}

Replace {endpoint} with the Exa API endpoint (search, contents, findSimilar, answer, research/v1). The gateway proxies requests to api.exa.ai and automatically injects your API key.

Authentication

All requests require the Maton API key in the Authorization header:

Authorization: Bearer $MATON_API_KEY

Environment Variable: Set your API key as MATON_API_KEY:

export MATON_API_KEY="YOUR_API_KEY"

Getting Your API Key

  1. Sign in or create an account at maton.ai
  2. Go to maton.ai/settings
  3. Copy your API key

Connection Management

Manage your Exa API key connections at https://ctrl.maton.ai.

List Connections

python \x3C\x3C'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections?app=exa&status=ACTIVE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

Create Connection

python \x3C\x3C'EOF'
import urllib.request, os, json
data = json.dumps({'app': 'exa', 'method': 'API_KEY'}).encode()
req = urllib.request.Request('https://ctrl.maton.ai/connections', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

Open the returned url in a browser to enter your Exa API key.

Get Connection

python \x3C\x3C'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

Delete Connection

python \x3C\x3C'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}', method='DELETE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

Specifying Connection

If you have multiple Exa connections, specify which one to use with the Maton-Connection header:

python \x3C\x3C'EOF'
import urllib.request, os, json
data = json.dumps({"query": "AI news"}).encode()
req = urllib.request.Request('https://gateway.maton.ai/exa/search', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
req.add_header('Maton-Connection', '{connection_id}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

If omitted, the gateway uses the default (oldest) active connection.

API Reference

Search

Perform a neural web search with optional content extraction.

POST /exa/search
Content-Type: application/json

{
  "query": "latest AI research papers",
  "numResults": 10
}

Request Parameters:

Parameter Type Required Description
query string Yes Search query string
numResults integer No Number of results (max 100, default 10)
type string No Search type: neural, auto (default), keyword
category string No Filter by category: company, research paper, news, tweet, personal site, financial report, people
includeDomains array No Only include these domains
excludeDomains array No Exclude these domains
startPublishedDate string No ISO 8601 date filter (after)
endPublishedDate string No ISO 8601 date filter (before)
contents object No Content extraction options (see below)

Contents Options:

{
  "contents": {
    "text": true,
    "highlights": true,
    "summary": true
  }
}
Option Type Description
text boolean/object Extract full page text
highlights boolean/object Extract relevant snippets
summary boolean/object Generate AI summary

Response:

{
  "requestId": "abc123",
  "resolvedSearchType": "neural",
  "results": [
    {
      "id": "https://example.com/article",
      "title": "Article Title",
      "url": "https://example.com/article",
      "publishedDate": "2024-01-15T00:00:00.000Z",
      "author": "Author Name",
      "text": "Full page content...",
      "highlights": ["Relevant snippet 1", "Relevant snippet 2"],
      "summary": "AI-generated summary..."
    }
  ],
  "costDollars": {
    "total": 0.005
  }
}

Get Contents

Retrieve full page contents for specific URLs.

POST /exa/contents
Content-Type: application/json

{
  "ids": ["https://example.com/page1", "https://example.com/page2"],
  "text": true
}

Request Parameters:

Parameter Type Required Description
ids array Yes List of URLs to fetch content from
text boolean No Include full page text
highlights boolean/object No Include relevant snippets
summary boolean/object No Generate AI summary

Response:

{
  "requestId": "abc123",
  "results": [
    {
      "id": "https://example.com/page1",
      "url": "https://example.com/page1",
      "title": "Page Title",
      "text": "Full page content..."
    }
  ]
}

Find Similar

Find pages similar to a given URL.

POST /exa/findSimilar
Content-Type: application/json

{
  "url": "https://example.com",
  "numResults": 10
}

Request Parameters:

Parameter Type Required Description
url string Yes URL to find similar pages for
numResults integer No Number of results (max 100, default 10)
includeDomains array No Only include these domains
excludeDomains array No Exclude these domains
contents object No Content extraction options

Response:

{
  "requestId": "abc123",
  "results": [
    {
      "id": "https://similar-site.com",
      "title": "Similar Site",
      "url": "https://similar-site.com",
      "score": 0.95
    }
  ],
  "costDollars": {
    "total": 0.005
  }
}

Answer

Get an AI-generated answer to a question with citations.

POST /exa/answer
Content-Type: application/json

{
  "query": "What is machine learning?",
  "text": true
}

Request Parameters:

Parameter Type Required Description
query string Yes Question to answer
text boolean No Include source text in response

Response:

{
  "requestId": "abc123",
  "answer": "Machine learning is a subset of artificial intelligence...",
  "citations": [
    {
      "id": "https://example.com/ml-guide",
      "url": "https://example.com/ml-guide",
      "title": "Machine Learning Guide"
    }
  ]
}

Research Tasks

Run asynchronous research tasks that explore the web, gather sources, and synthesize findings with citations.

Create Research Task

POST /exa/research/v1
Content-Type: application/json

{
  "instructions": "What are the top AI companies and their main products?",
  "model": "exa-research"
}

Request Parameters:

Parameter Type Required Description
instructions string Yes What to research (max 4096 chars)
model string No Model to use: exa-research-fast, exa-research (default), exa-research-pro
outputSchema object No JSON Schema for structured output

Response:

{
  "researchId": "r_01abc123",
  "createdAt": 1772969504083,
  "model": "exa-research",
  "instructions": "What are the top AI companies...",
  "status": "running"
}

Get Research Task

GET /exa/research/v1/{researchId}

Query Parameters:

Parameter Type Description
events string Set to true to include event log
stream string Set to true for SSE streaming

Response (completed):

{
  "researchId": "r_01abc123",
  "status": "completed",
  "createdAt": 1772969504083,
  "finishedAt": 1772969520000,
  "model": "exa-research",
  "instructions": "What are the top AI companies...",
  "output": {
    "content": "Based on my research, the top AI companies are..."
  },
  "costDollars": {
    "total": 0.15,
    "numSearches": 5,
    "numPages": 20,
    "reasoningTokens": 1500
  }
}

Status values: pending, running, completed, canceled, failed

List Research Tasks

GET /exa/research/v1?limit=10

Query Parameters:

Parameter Type Description
limit integer Results per page (1-50, default 10)
cursor string Pagination cursor

Response:

{
  "data": [
    {
      "researchId": "r_01abc123",
      "status": "completed",
      "model": "exa-research",
      "instructions": "What are the top AI companies..."
    }
  ],
  "hasMore": false,
  "nextCursor": null
}

Code Examples

JavaScript

// Search with content extraction
const response = await fetch('https://gateway.maton.ai/exa/search', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${process.env.MATON_API_KEY}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    query: 'latest AI news',
    numResults: 5,
    contents: { text: true, highlights: true }
  })
});
const data = await response.json();

Python

import os
import requests

# Search with content extraction
response = requests.post(
    'https://gateway.maton.ai/exa/search',
    headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'},
    json={
        'query': 'latest AI news',
        'numResults': 5,
        'contents': {'text': True, 'highlights': True}
    }
)
data = response.json()

Notes

  • Search types: neural (semantic), auto (hybrid), keyword (traditional)
  • Maximum 100 results per search request
  • Content extraction (text, highlights, summary) incurs additional costs
  • Categories like people and company have restricted filter support
  • Timestamps are in ISO 8601 format
  • IMPORTANT: When piping curl output to jq or other commands, environment variables like $MATON_API_KEY may not expand correctly in some shell environments

Error Handling

Status Meaning
400 Missing Exa connection or invalid request
401 Invalid or missing Maton API key
429 Rate limited
4xx/5xx Passthrough error from Exa API

Resources

安全使用建议
This skill is internally consistent with its description, but before installing: ensure you trust maton.ai and are comfortable giving this skill a Maton API key (MATON_API_KEY). Use a dedicated or scoped key if possible, avoid sending highly sensitive secrets or data through the API, and be prepared to revoke the key if you stop using the skill. Verify Maton’s privacy/data-retention policy if you will send private content for research or extraction.
功能分析
Type: OpenClaw Skill Name: exa-api Version: 1.0.0 The exa-api skill is a legitimate integration for the Exa API, utilizing a managed gateway (gateway.maton.ai) for authentication and request proxying. The SKILL.md file provides standard documentation and Python/JavaScript examples for web searching and research tasks, with no evidence of malicious intent, data exfiltration, or unauthorized execution.
能力评估
Purpose & Capability
Name/description state Exa API access for web search, content extraction, similarity, answers and async research. The SKILL.md only requires a MATON_API_KEY and demonstrates POST/GET calls to maton.ai gateway and control endpoints — these are coherent with the stated purpose.
Instruction Scope
Runtime instructions only show HTTP requests to https://gateway.maton.ai and https://ctrl.maton.ai and using the MATON_API_KEY Authorization header. The instructions do not ask the agent to read unrelated files, other environment variables, or system config, nor to send data to unexpected endpoints.
Install Mechanism
No install spec or code files are included (instruction-only). Nothing will be written to disk or downloaded during install, which is the lowest-risk model.
Credentials
Only a single environment variable (MATON_API_KEY) is required and that matches the API usage shown. No unrelated credentials, config paths, or broad secrets are requested.
Persistence & Privilege
Skill is not always-enabled, is user-invocable, and does not request persistent system privileges or modify other skills' configuration. Autonomous invocation is allowed (platform default) but not combined with other concerning privileges.
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install exa-api
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /exa-api 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v1.0.0
- Initial release of exa API integration. - Enables neural web search, page content retrieval, similar page finding, AI-generated answers, and async research tasks. - Managed API key authentication via Maton, with connection management tools. - Includes detailed usage instructions and sample code for all endpoints.
元数据
Slug exa-api
版本 1.0.0
许可证 MIT-0
累计安装 2
当前安装数 2
历史版本数 1
常见问题

Exa 是什么?

Exa API integration with managed API key authentication. Perform neural web search, retrieve page contents, find similar pages, get AI-generated answers, and... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 347 次。

如何安装 Exa?

在 OpenClaw 或 Claude Code 对话框中运行命令「/install exa-api」即可一键安装,无需额外配置。

Exa 是免费的吗?

是的,Exa 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。

Exa 支持哪些平台?

Exa 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。

谁开发了 Exa?

由 byungkyu(@byungkyu)开发并维护,当前版本 v1.0.0。

💬 留言讨论