Connecting Local LLMs to the Web with MCP

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.

This entry was posted in . Bookmark the permalink.