Skip to main content

exa

Use Exa for web search, code context lookup, and company or people research via the official SDK, direct API calls, or MCP. Use when setting up Exa in a coding-agent environment, testing EXA_API_KEY, configuring Exa MCP, or looking up current web information.

Quellinformationen

Repository
lefant/agent-skills
Letzte Quellaktivität
29. April 2026 um 15:23
Erkannte Sprache von SKILL.md
Englisch
Sterne
1
Forks
1

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

Datei-Explorer
4 Dateien

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
name
exa
description
Use Exa for web search, code context lookup, and company or people research via the official SDK, direct API calls, or MCP. Use when setting up Exa in a coding-agent environment, testing EXA_API_KEY, configuring Exa MCP, or looking up current web information.
metadata
{"openclaw":{"emoji":"🔎","requires":{"env":"[Truncated]"},"primaryEnv":"EXA_API_KEY","skillKey":"exa","os":["linux","darwin","win32"]}}
# Exa Use this skill for Exa SDK, API, and MCP work. ## Requirement: EXA_API_KEY Before any Exa call, verify that `EXA_API_KEY` is present without printing it: ```bash test -n "${EXA_API_KEY:-}" ``` In OpenClaw, this skill declares `primaryEnv: EXA_API_KEY`, so prefer configuring `skills.entries.exa.apiKey` as a SecretRef. OpenClaw injects the key for the agent run. For manual use outside OpenClaw, export `EXA_API_KEY` from your local secret manager or an untracked local env file. Do not write API keys into tracked repo files or echo them into logs. ## First documentation step Read `references/llms.txt` first. That file is a full local snapshot of Exa's documentation index and points to: - JavaScript SDK docs - Exa MCP setup - coding-agent search and contents guides - vertical-specific references like code, company, news, and people search - Exa-published agent skill templates Important pages usually worth following from the index: - `https://exa.ai/docs/sdks/javascript-sdk.md` - `https://exa.ai/docs/reference/search-api-guide-for-coding-agents.md` - `https://exa.ai/docs/reference/contents-api-guide-for-coding-agents.md` - `https://exa.ai/docs/reference/exa-mcp.md` - `https://exa.ai/docs/reference/code-search-claude-skill.md` If the task is to add a brand-new Exa integration to a project, Exa's coding-agent docs recommend using Dashboard Onboarding first: - `https://dashboard.exa.ai/onboarding` ## Preferred in this repo For repo-local automation, prefer this order: 1. official JavaScript SDK (`exa-js`) via a small Node helper 2. direct HTTP (`/search`, `/contents`) for low-level debugging and inspection 3. MCP only when the user specifically wants tool-based agent integration Operational note: - if handwritten HTTP fails but the key should work, test the official SDK before concluding that the key is invalid - official SDK behavior can succeed where a naive raw HTTP request fails due to request-shape or compatibility details ## Known-good local helper pattern This skill ships reusable helper examples at: - `scripts/exa-search.mjs` - `scripts/exa-contents.mjs` Use it as a starting point for repo-local helpers. Recommended workflow: - keep reusable Exa helpers in the target repo's `scripts/` directory - install `exa-js` locally in the workspace; do not assume global npm access - if local tooling lives under `.tools/`, resolve packages from there - rely on OpenClaw SecretRef skill injection when running inside OpenClaw - for manual runs, load `EXA_API_KEY` from an untracked local secret source - emit compact normalized JSON for downstream agent use The bundled helper is designed to resolve `exa-js` from the current working directory or `.tools/`, so it works in restricted environments that do not allow global installs. Known-good invocation patterns once copied into a repo: ```bash node scripts/exa-search.mjs 'Altego AI founders' 3 node scripts/exa-contents.mjs 'https://altego.ai/about' highlights 2000 ``` Recommended JSON shape for helper output: - search helper: - `query` - `count` - `results[].title` - `results[].url` - `results[].publishedDate` - `results[].highlights` - contents helper: - `url` - `mode` - `result.title` - `result.url` - `result.publishedDate` - `result.author` - `result.highlights` - `result.text` ## Decision rule: search vs contents Use this default rule: - use `exa.search()` or `/search` when discovering sources - use `exa.getContents()` or `/contents` once you know the exact URL - request `highlights` first for token efficiency - request full `text` only when deeper reading is required ## Minimal SDK usage ```js import Exa from "exa-js"; const exa = new Exa(); const result = await exa.search("latest developments in AI safety research", { type: "auto", numResults: 10, contents: { highlights: { maxCharacters: 4000, }, }, }); ``` Minimal contents retrieval: ```js import Exa from "exa-js"; const exa = new Exa(); const { results } = await exa.getContents(["https://altego.ai/about"], { text: true, }); ``` ## Minimal curl usage Basic search request: ```bash curl -fsS 'https://api.exa.ai/search' \ -H "x-api-key: $EXA_API_KEY" \ -H 'Content-Type: application/json' \ -d '{ "query": "latest developments in AI safety research", "type": "auto", "numResults": 10, "contents": { "highlights": { "maxCharacters": 4000 } } }' ``` Use `type: "auto"` by default unless the user explicitly needs a different search mode. ## Known-good smoke test To verify the key works against a real company lookup, use this two-step flow. ### 1. Search for the target SDK/helper path: ```bash node scripts/exa-search.mjs 'co-founders of altego.ai' 3 ``` Raw HTTP path: ```bash curl -fsS 'https://api.exa.ai/search' \ -H "x-api-key: $EXA_API_KEY" \ -H 'Content-Type: application/json' \ -d '{ "query": "co-founders of altego.ai", "type": "auto", "numResults": 5, "contents": { "highlights": { "maxCharacters": 1200 } } }' ``` This query works as a smoke test, but search results may include noisy `AlterEgo` matches. ### 2. Fetch the authoritative page contents SDK/helper path: ```bash node scripts/exa-contents.mjs 'https://altego.ai/about' text 5000 ``` SDK path: ```js import Exa from "exa-js"; const exa = new Exa(); const { results } = await exa.getContents(["https://altego.ai/about"], { text: { maxCharacters: 5000 }, }); ``` Raw HTTP path: ```bash curl -fsS 'https://api.exa.ai/contents' \ -H "x-api-key: $EXA_API_KEY" \ -H 'Content-Type: application/json' \ -d '{ "urls": ["https://altego.ai/about"], "text": { "maxCharacters": 5000 } }' ``` At the time this skill was created, that page identified the founders as: - Mats Horn - Fabian Linzberger Use `/contents` when you already know the URL and want the cleanest answer from a known page. ## MCP Treat MCP as optional, not primary. Base MCP URL: ```text https://mcp.exa.ai/mcp ``` If the client supports key-in-URL remote config: ```text https://mcp.exa.ai/mcp?exaApiKey=YOUR_API_KEY ``` Optional tool restriction example: ```text https://mcp.exa.ai/mcp?exaApiKey=YOUR_API_KEY&tools=web_search_exa,get_code_context_exa,people_search_exa ``` Codex example: ```bash codex mcp add exa --url https://mcp.exa.ai/mcp ``` If tools do not appear after config changes, restart the MCP client. ## API usage guidance Prefer these defaults unless the task needs something else: - `type: "auto"` - compact `highlights` for search-result evidence - `/contents` or `exa.getContents()` for known URLs - domain filters only when the user needs tighter source control Typical categories: - `company` - `people` - `news` - `research paper` - `personal site` - `financial report` ## Common mistakes to avoid Avoid outdated or incorrect parameter shapes. Common mistakes called out in Exa docs include: - using deprecated `useAutoprompt` - using `includeUrls` or `excludeUrls` instead of domain filters - putting `text` or `highlights` at the top level of `/search` instead of under `contents` - confusing `/search` payload shape with `/contents` payload shape When unsure, read the relevant page from `references/llms.txt` and follow the current docs.
Auf GitHub ansehen