Skip to main content

Tavily plugin

Gives NeMo Helix agents live web search and page extraction through Tavily. Agents get two tools, tavily_search and tavily_extract, from Tavily's hosted MCP server.

How it works

agent ──MCP──▶ /apis/tavily/v2/workspaces/<ws>/mcp ──MCP──▶ mcp.tavily.com/mcp
               (this plugin:
                 • adds the workspace's Tavily key from Helix Secrets
                 • tags traffic with X-Client-Name: nemo-helix
                 • lists and allows only tavily_search and tavily_extract)

The proxy forwards MCP traffic unchanged apart from those three things. Tool schemas, descriptions and behavior come from the hosted server, so Tavily's improvements reach Helix agents without a plugin release. Agents never see the Tavily API key.

Surface Entry point What it provides
Service nemo.services → tavily MCP proxy at POST /apis/tavily/v2/workspaces/{workspace}/mcp, and GET .../status for the URL agents use
CLI nemo.cli → tavily nemo tavily setup, enable, disable, status, search, extract
Skill nemo.skills → tavily nemo-tavily-web-search, for coding assistants

Enable Tavily

Installing the plugin serves nothing. The proxy stays off until a platform operator turns it on, so an installed but unused plugin mounts no routes and never contacts Tavily. Enabling web search for an agent takes three steps:

Step Who How often
1. Turn on the proxy Platform operator Once per platform
2. Store a Tavily API key Workspace user Once per workspace
3. Enable Tavily on an agent Workspace user Once per agent

Requires NeMo Helix 0.9 or later. Earlier releases have a different agents API, and the plugin does not load on them.

The plugin is published to PyPI as nemo-helix-tavily-plugin. It depends only on NeMo Helix's plugin SDK (nemo-helix-plugin), not on nemo-helix, so it never installs or upgrades the platform. Install it into an environment that already has NeMo Helix. Each GitHub release also attaches the wheel, with its SHA-256 and a build provenance attestation, if you prefer to pin by URL.

1. Turn on the proxy (platform operator)

The proxy reads enabled at startup, so every change needs a platform restart.

Local platform. Install the plugin into the environment that runs nemo services, then restart with the proxy on:

pip install nemo-helix-tavily-plugin
NEMO_TAVILY_ENABLED=true nemo services restart

The restarted platform takes the variable from your shell, so set it every time you start the platform (for example, export it in your shell profile). Alternatively, set tavily: {enabled: true} in the platform config file.

Kubernetes (Helm). The plugin must be installed in the API image, because the chart cannot add Python packages at runtime. If your nhx-api image does not include it, build one that does, and point both api.image and core.image at it:

FROM <your nhx-api image>
RUN /app/.venv/bin/pip install --no-cache-dir --no-deps "nemo-helix-tavily-plugin==<version>"

Keep --no-deps. NeMo Helix images report their own packages as version 0.0.0, so without it pip would try to replace them from PyPI to satisfy the plugin's nemo-helix-plugin>=0.9 requirement. The image already has every dependency the plugin needs.

If your image builds have no internet access, download the wheel once (pip download --no-deps nemo-helix-tavily-plugin==<version>, or from the GitHub release), then COPY it into the build and install it from the file instead.

Then turn the proxy on in your Helm values and upgrade the release. Pass all of your existing values files as well; a value left out of helm upgrade goes back to its default.

platformConfig:
  tavily:
    enabled: true
helm upgrade <release> <chart> -n <namespace> -f values.yaml -f values-tavily.yaml --wait

Check. nemo tavily status --workspace <ws> prints Tavily proxy: enabled, agents use <url>. On Kubernetes the URL names the in-cluster API Service, for example http://nemo-helix-api:8080/..., not localhost. If it prints Tavily proxy: disabled, the platform did not pick up the setting: check that it restarted.

2. Store a Tavily API key (workspace user)

The nemo tavily commands come from the same plugin, so install it wherever your nemo CLI runs too (pip install nemo-helix-tavily-plugin next to nemo-helix; the plugin does not bring the CLI with it). Then store the key for the workspace. The command prompts for it, so the key stays out of shell history:

nemo tavily setup --workspace <ws>

The key is saved as the workspace secret tavily-api-key. If the proxy is off, setup still stores it and prints how to turn the proxy on.

Check. Search from the CLI. This goes through the same proxy agents use, with the workspace's key, so it needs no key on your machine:

nemo tavily search "latest nemotron release" --workspace <ws> -n 3

3. Enable Tavily on an agent (workspace user)

nemo tavily enable <agent> --workspace <ws>

enable rebuilds and redeploys the agent, so it asks for confirmation; --yes skips the prompt. The agent is redeployed in the same mode and with the same image it had. Only nemo-agents-spec-v1 agents are supported.

Check. nemo tavily status --workspace <ws> lists the agent as enabled. Then ask the agent something recent. Its answer should cite web sources, and its traces show tavily_search calls.

To turn web search off for an agent:

nemo tavily disable <agent> --workspace <ws>

Calling the tools directly

search and extract call Tavily without an agent, for checking a key or looking something up:

nemo tavily search "latest nemotron release" --workspace <ws> -n 5
nemo tavily extract https://example.com --workspace <ws> -f json > page.json

They use the workspace's key, the tool allowlist and the X-Client-Name attribution, like agents do. search prints a table of results and extract prints each page as markdown; -f json gives Tavily's full response.

What enable changes

enable adds this to the agent's config stored in Helix (not your local agent.yaml), then rebuilds the agent the same way nemo agents redeploy does:

mcp:
  servers:
    tavily:
      transport: streamable-http
      url: <platform>/apis/tavily/v2/workspaces/<ws>/mcp

The platform reports <platform> from GET /apis/tavily/v2/workspaces/<ws>/status, as an address deployed agents can reach: the in-cluster API Service on Kubernetes (NHX_INTERNAL_BASE_URL, set by the Helm chart), otherwise the platform's own base URL. enable adjusts it for the agent's deployment mode: Docker containers reach a loopback host through host.docker.internal. Pass --mcp-url to override.

Configuration

Setting Env var Default
Serve the proxy (read at startup) NEMO_TAVILY_ENABLED false
Upstream MCP URL NEMO_TAVILY_MCP_URL https://mcp.tavily.com/mcp
Tools agents can use NEMO_TAVILY_ALLOWED_TOOLS ["tavily_search","tavily_extract"]
Upstream read timeout (s) NEMO_TAVILY_TIMEOUT_SECONDS 300

Set these in the platform's environment, or under the tavily key in the platform config file (Helm: platformConfig.tavily).

Limits

  • Only nemo-agents-spec-v1 agents.
  • Subprocess, Docker and Kubernetes deployments get a reachable MCP URL automatically. Other deployment modes need --mcp-url.
  • With platform auth on, container agents need their deployment to authenticate calls to the proxy; this is not handled yet.

Development

uv sync                      # plugin, NeMo Helix (the `helix` dev group) and the test and lint tools
uv run pytest
uv run ruff check && uv run ruff format --check && uv run ty check

Keep nemo-helix out of the runtime dependencies; it is only a dev dependency.

scripts/smoke.py checks that an installed build loads and runs on a NeMo Helix platform: entry-point discovery, no routes while disabled, clean authz, and a live platform that serves the proxy only when enabled. It never contacts Tavily. Run it with the Python of a Helix environment the plugin is installed in, for example inside an nhx-api image:

pip install --no-deps dist/nemo_helix_tavily_plugin-*.whl
python scripts/smoke.py

License

MIT. See LICENSE.

Metadata

Release files for nemo-helix-tavily-plugin 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nemo-helix-tavily-plugin 0.2.0
File Size Uploaded Provenance Actions
nemo_helix_tavily_plugin-0.2.0.tar.gz 30.0 kB With provenance Details for nemo_helix_tavily_plugin-0.2.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for nemo-helix-tavily-plugin 0.2.0
File Interpreter ABI Platform Actions
nemo_helix_tavily_plugin-0.2.0-py3-none-any.whl Python 3 none any Details for nemo_helix_tavily_plugin-0.2.0-py3-none-any.whl

Total release size: 54.1 kB

Release files / nemo_helix_tavily_plugin-0.2.0.tar.gz

Download URL nemo_helix_tavily_plugin-0.2.0.tar.gz
Size 30.0 kB
Tags Source
SHA-256 checksum
How to use checksums
42e8514242461f2d36d5c5927c24e29721b9a4c38d561cb8571d740551bb660b
BLAKE2b-256 checksum
How to use checksums
6c2525a0176e33ad7c257b8dfde9b5d2bdfffc99de243f0b1c2357ec0bebe845
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.

Transparency log

Release files / nemo_helix_tavily_plugin-0.2.0-py3-none-any.whl

Download URL nemo_helix_tavily_plugin-0.2.0-py3-none-any.whl
Size 24.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0852c9ff0e04ba178f98d96ac9efab318aba079699476eaf08962e56f556a770
BLAKE2b-256 checksum
How to use checksums
b1468c74b36c573456db2fe491a8714f0e966869ceb00c23eb62baa758406c6a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.

Transparency log

Security for nemo-helix-tavily-plugin 0.2.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for nemo_helix_tavily_plugin-0.2.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page