Connecting Local LLMs to the Web with MCP
A local model is private and cheap to run, but by default it’s sealed off from anything newer than its training data. MCP servers close that gap: with a few configured servers, even a lightweight local model can search the web, read articles, and pull real-time data — without sending your queries to a hosted assistant. Search services like Brave, Tavily, and DuckDuckGo all offer free tiers, so a private “search assistant” on your own machine costs nothing to run.
Two concepts that make it work
- MCP gives the model a menu of external tools and lets it decide which to call for a given request, rather than forcing a fixed API call.
- Tool calling is the model-side ability to recognize when it needs outside information and invoke a tool to get it. Without it, the model is stuck with what it already knows.
Requirements
- Node.js and Python installed.
- An MCP-capable host — LM Studio (0.3.17 or newer), Claude Desktop, or Cursor.
- A tool-calling model. Good local options include GPT-oss, DeepSeek R1, Jan-v1-4b, and Llama-3.2 Instruct. In LM Studio, tool-capable models carry a hammer icon.
All servers below are declared in one mcp.json. In LM Studio, reach it via Settings → Program → Edit mcp.json. Each entry needs a name, the command to launch it, and any environment variables such as API keys.
Search servers
DuckDuckGo — the fastest start
No API key required. From LM Studio’s model catalog, open lmstudio.ai/danielsig/duckduckgo and lmstudio.ai/danielsig/visit-website and click Run in LM Studio on each. The model can now search and read pages.
Brave Search — independent index
Brave runs its own search index and offers a free tier (around 2,000 queries per month). Get a key at brave.com/search/api, then add:
{
"mcpServers": {
"brave-search": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-brave-search"],
"env": {
"BRAVE_API_KEY": "your_brave_api_key_here"
}
}
}
}
Tavily — search tuned for agents
Tavily offers a free tier (around 1,000 credits per month) and specialized search for news, code, and images. Create a key at app.tavily.com, then add:
{
"mcpServers": {
"tavily-remote": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.tavily.com/mcp/?tavilyApiKey=YOUR_API_KEY_HERE"]
}
}
}
Reading and interacting with pages
Search returns snippets. To act on full page content, add a fetch or browser server.
MCP Fetch — full article text
Retrieves a complete page and converts it to model-friendly Markdown. Install the runner with pip install uvx, then add:
{
"mcpServers": {
"fetch": {
"command": "uvx",
"args": [
"mcp-server-fetch"
]
}
}
}
You can now hand the model a URL and ask it to summarize or analyze the whole article.
Browser automation — full interaction
For pages that need clicks, form fills, or JavaScript rendering, use a browser server such as Browser MCP or Playwright. These let the model navigate and interact rather than just read.
A complete configuration
This mcp.json combines fetch, Brave, browser automation, and Tavily. Replace the placeholder keys, save, and restart the host application.
{
"mcpServers": {
"fetch": {
"command": "uvx",
"args": [
"mcp-server-fetch"
]
},
"brave-search": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-brave-search"
],
"env": {
"BRAVE_API_KEY": "YOUR_BRAVE_API_KEY_HERE"
}
},
"browsermcp": {
"command": "npx",
"args": [
"@browsermcp/mcp@latest"
]
},
"tavily-remote": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://mcp.tavily.com/mcp/?tavilyApiKey=YOUR_TAVILY_API_KEY_HERE"
]
}
}
}
With these servers in place, a local model gets private, low-cost web access — search for discovery, fetch for reading, and a browser server for anything interactive.

