https://github.com/browserless/browserless-langchain
LangChain (Python + JS) examples for the Browserless MCP server
https://github.com/browserless/browserless-langchain
browser-automation browserless langchain mcp python web-scraping
Last synced: 29 days ago
JSON representation
LangChain (Python + JS) examples for the Browserless MCP server
- Host: GitHub
- URL: https://github.com/browserless/browserless-langchain
- Owner: browserless
- License: mit
- Created: 2026-05-06T19:27:06.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2026-05-06T19:47:34.000Z (3 months ago)
- Last Synced: 2026-05-15T19:39:45.127Z (3 months ago)
- Topics: browser-automation, browserless, langchain, mcp, python, web-scraping
- Language: Jupyter Notebook
- Homepage:
- Size: 28.3 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Browserless × LangChain
Runnable Python and JS examples for the [Browserless](https://browserless.io) MCP server. Browserless is a **stateful** MCP server: a multi-turn browser agent works in a real ReAct loop over HTTP, not just batched single-call mode.
The hosted endpoint at `https://mcp.browserless.io/mcp` exposes 10 tools auto-importable via `langchain-mcp-adapters` — no partner package needed.
| | Stateless tools (8) | Stateful tools (2) |
|---|---|---|
| | `smartscraper`, `search`, `map`, `crawl`, `export`, `performance`, `function`, `download` | `agent`, `skill` |
| Use case | Single-shot scraping, research, data extraction | Multi-turn browser automation, ReAct loops with persistent browser state |
> **Multi-turn agent in Python**: bind tools inside `async with client.session(...)` to keep the same MCP session across calls — see [`python/README.md`](./python/README.md#note-on-python-session-handling). The JS adapter does this automatically.
## Python
```python
import os
from langchain_mcp_adapters.client import MultiServerMCPClient
client = MultiServerMCPClient({
"browserless": {
"transport": "http",
"url": "https://mcp.browserless.io/mcp",
"headers": {"Authorization": f"Bearer {os.environ['BROWSERLESS_TOKEN']}"},
}
})
tools = await client.get_tools()
print([t.name for t in tools]) # 10 tools
```
See [`python/`](./python/) for full notebooks: `quickstart.ipynb`, `research_agent.ipynb`, `browser_agent.ipynb`.
## JS / TypeScript
```ts
import { MultiServerMCPClient } from "@langchain/mcp-adapters";
const client = new MultiServerMCPClient({
mcpServers: {
browserless: {
transport: "http",
url: "https://mcp.browserless.io/mcp",
headers: { Authorization: `Bearer ${process.env.BROWSERLESS_TOKEN}` },
},
},
});
const tools = await client.getTools();
console.log(tools.map((t) => t.name)); // 10 tools
```
See [`js/`](./js/) for full scripts: `quickstart.ts`, `research_agent.ts`, `browser_agent.ts`.
## Get a token
[account.browserless.io](https://account.browserless.io)
## Links
- Hosted MCP server: [mcp.browserless.io](https://mcp.browserless.io)
- Python adapter: [`langchain-mcp-adapters`](https://github.com/langchain-ai/langchain-mcp-adapters)
- JS adapter: [`@langchain/mcp-adapters`](https://github.com/langchain-ai/langchainjs/tree/main/libs/langchain-mcp-adapters)