Metadata-Version: 2.4
Name: langchain-novada
Version: 0.1.1
Summary: LangChain tools for Novada — web search, scrape, crawl, extract, research & proxy — derived LIVE from the Novada MCP server (zero contract drift).
Project-URL: Homepage, https://www.novada.com
Project-URL: Repository, https://github.com/NovadaLabs/Novada-Langchain
Project-URL: Documentation, https://www.novada.com
Author: Novada
License: MIT
License-File: LICENSE
Keywords: agent-tools,langchain,mcp,novada,proxy,rag,web-scraping,web-search
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Requires-Python: >=3.10
Requires-Dist: langchain-core>=0.3
Requires-Dist: langchain-mcp-adapters<1.0,>=0.3
Requires-Dist: mcp>=1.0
Provides-Extra: dev
Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
Requires-Dist: pytest>=7.0; extra == 'dev'
Description-Content-Type: text/markdown

# langchain-novada

LangChain tools for [Novada](https://www.novada.com) — **web search, scrape, crawl, extract, research & proxy** for your agents.

Tools and their input schemas are **derived live from the Novada MCP server's `tools/list`**, so this package never hard-codes the Novada API contract. When the server adds or changes a tool, your tools reflect it on the next call — **zero drift**.

## Install

```bash
pip install langchain-novada
```

## Quickstart (hosted — no install of the server)

```python
from langchain_novada import aget_tools

# api_key from the argument or the NOVADA_API_KEY env var
tools = await aget_tools(api_key="nvd_...")

# hand them to any LangChain / LangGraph agent
from langgraph.prebuilt import create_react_agent
agent = create_react_agent("anthropic:claude-sonnet-4-6", tools)
```

Synchronous code:

```python
from langchain_novada import get_tools
tools = get_tools(api_key="nvd_...")
```

## Local mode (self-host the server via npx)

```python
tools = await aget_tools(api_key="nvd_...", mode="local")  # spawns `npx -y novada-mcp`
```

## Tool groups

The default hosted endpoint exposes the core group: `novada_search`, `novada_extract`,
`novada_crawl`, `novada_map`, `novada_research`, `novada_scrape`, `novada_verify`.
Request additional groups (e.g. proxy, platform scrapers) with `groups=`:

```python
tools = await aget_tools(api_key="nvd_...", groups=["proxy", "scrape"])
```

## Auth

Pass `api_key=` or set `NOVADA_API_KEY`. Get a key at
<https://dashboard.novada.com/overview/scraper/api-playground/>.

## Why this design

A LangChain wrapper that hand-copies an API contract drifts and breaks. This package
instead asks the live Novada MCP server what tools exist and what they accept, so the
contract has a single source of truth (the server) and a CI **live contract test** that
fails the build if anything drifts.

## License

MIT © Novada
