Prefer hosted Exa MCP in the integration catalog
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 72/100
Research direction
Start with integrations/catalog/exa.json, using the datadog and huggingface entries as patterns, and check integrations/catalog.schema.json for valid fields. Add a hosted shttp option at https://mcp.exa.ai/mcp as the first connection option, with an optional password header x-api-key, and keep the npx stdio option after it. Done when npm run build:integrations leaves no unintended diff and tests/test_integration_catalog_in_sync.py passes.
Written by the indexing model from the issue text.
Description
Make https://mcp.exa.ai/mcp the default Exa connection so people don’t need to run it locally. Keep npx as an alternative, with optional API-key support for hosted usage.
built in researcher stays unchanged.
OpenHands AI triage
The following comments and acceptance criteria were added by the OpenHands AI agent.
Triage
The request maps to a single-file catalog change. Per the root AGENTS.md, integrations/catalog/*.json is the hand-authored source of truth for integrations, and the integrations README defines the first connectionOptions entry as the preferred default, so "hosted by default" means listing a hosted streamable-HTTP option first in integrations/catalog/exa.json. The hosted endpoint was verified live (keyless MCP handshake and tools/list return web_search_exa and web_fetch_exa), and Exa's official MCP docs document the hosted URL, a keyless free tier, OAuth via ?login, and API-key auth sent as the x-api-key header. The hosted option follows the catalog's existing datadog precedent (named header fields with auth.strategy: "none"), with the key field optional per this issue, and keyless connectability declared like the huggingface entry.
Scope: integrations/catalog/exa.json only, plus regenerating integrations/catalog-index.js with npm run build:integrations as AGENTS.md requires.
Non-goals: no changes to other integrations, client/app code, or the built-in researcher; no hosted OAuth connection option (Exa's ?login OAuth stays a documentation note only); no catalog schema changes; the npx stdio option and its required EXA_API_KEY field stay unchanged; no migration is needed since the catalog change only affects the default presented for new connections, and existing saved connections keep their chosen option.
Acceptance Criteria
-
integrations/catalog/exa.jsonlists, as its firstconnectionOptionsentry, a hosted MCP option withprovider: "mcp",transport.kind: "shttp", andtransport.url: "https://mcp.exa.ai/mcp", so clients applying the documented "first option is the preferred default" contract present hosted Exa as the default connection. - The hosted option supports keyless and API-key use: the Exa API key is sent as the
x-api-keyrequest header (not theAuthorizationheader) and is optional, declared via the catalog's named header-field mechanism (transport.headerFieldswithtype: "password",required: false, matching thedatadogentry's pattern) with keyless connectability declared viaapiKeyOptionalas in thehuggingfaceentry; the field's helper text and link resolve and match Exa's documented instructions for creating an API key. - The existing npx stdio option (
command: "npx",args: ["-y", "exa-mcp-server"],EXA_API_KEYenv field) remains present and unchanged as a later connection option. - The edited entry is valid: JSON Schema validation against
integrations/catalog.schema.jsonpasses, the entry validates throughopenhands_extensions.IntegrationCatalogEntry, andnpm run build:integrationsregeneratesintegrations/catalog-index.jsleaving no unintended diff. -
uv sync --group test && uv run pytest -q tests/test_integration_catalog_in_sync.pypasses. - Live keyless check: connecting to
https://mcp.exa.ai/mcpover streamable HTTP lists tools includingweb_search_exaandweb_fetch_exa(verified feasible from a direct IPv4 connection; evidence is the observed tool names via the SDKcreate_mcp_toolspath or an equivalent scripted MCP handshake). With an API key set in thex-api-keyheader,agent_runis additionally advertised; verify when a key is available, otherwise skip per thetests/test_live_integration_smoke.pyconvention. -
docsUrlresolves to the live Exa MCP documentation page (the currenthttps://docs.exa.ai/reference/exa-mcpredirects tohttps://exa.ai/docs/get-started/exa-mcp; updatingdocsUrlto the canonical URL within the same file is in scope).
- Dominant language
- Python
- Stars
- 176
- Forks
- 124
- Avg merge
- 1d 15h
- Merged PRs (30d)
- 60
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- No contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from OpenHands/extensions
-
customer-support enhancement priority:medium ready-for-dev
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
OpenHands/extensions#900 ·
Maintainers usually reply within 1 day
-
priority:low
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
OpenHands/extensions#829 · 1 comment ·
Maintainers usually reply within 1 day
-
Add Employed by Guaq AI (hosted job-search MCP) to the integrations catalogPossibly taken @buddywhitman claimed this 24 days ago. Openpriority:low ready-for-dev
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
OpenHands/extensions#769 ·
Maintainers usually reply within 1 day
-
Add Spicrawl web-scraping MCP catalogue entryPossibly taken @DibbayajyotiRoy claimed this 23 days ago. Openpriority:low ready-for-dev
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
OpenHands/extensions#738 ·
Maintainers usually reply within 1 day
-
Add IsMalicious threat-intelligence MCP catalogue entryPossibly taken A pull request linked to this issue is open or already merged. Openpriority:low ready-for-dev
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
OpenHands/extensions#721 ·
Maintainers usually reply within 1 day
All issues in OpenHands/extensions
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
strawberry-graphql/strawberry#4794 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
dataforgoodfr/cetolog#21 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
btclib-org/btclib#2932 ·
Maintainers usually reply within 1 day
-
metrics priority: medium
Difficulty 1/5 1-3 hours Newbie friendliness 86/100
LearningCircuit/local-deep-research#8336 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 80/100