Skip to main content
Glama
akopper

ollama-websearch-mcp

by akopper
README.md
# Ollama WebSearch MCP Server

MCP server for Ollama web search and web fetch APIs.

## Overview

This MCP server exposes two tools for interacting with Ollama's web services:

- **web_search**: Perform a web search using Ollama's hosted search API
- **web_fetch**: Fetch the content of a web page

## Requirements

- Python 3.10+
- Ollama account (for cloud API access)

## Installation

### Clone

```bash
git clone https://github.com/akopper/ollama-websearch-mcp.git
cd ollama-websearch-mcp
```

### From Source

```bash
pip install -e .
```

### With uvx

uvx runs the server in stdio mode by default (for Claude Desktop/Cursor):

```bash
uvx --from https://github.com/akopper/ollama-websearch-mcp ollama-websearch-mcp
```

For HTTP mode with uvx:

```bash
uvx --from https://github.com/akopper/ollama-websearch-mcp ollama-websearch-mcp -- --http
```

### Docker

The Docker image defaults to HTTP mode.

```bash
# HTTP mode (default) - for remote usage
docker run -d -p 8000:8000 -e OLLAMA_API_KEY=your-api-key ghcr.io/akopper/ollama-websearch-mcp

# stdio mode - for Claude Desktop/Cursor
docker run -it --rm -e OLLAMA_API_KEY=your-api-key ghcr.io/akopper/ollama-websearch-mcp --stdio
```

### Docker Compose

```bash
cp .env.example .env
# Edit .env with your API key
docker-compose up -d
```

## Configuration

### Environment Variables

| Variable | Description | Default |
|----------|-------------|---------|
| `OLLAMA_API_KEY` | API key for Ollama cloud services | None |
| `OLLAMA_HOST` | Host URL for Ollama | `https://ollama.com` |

### Getting an API Key

1. Go to [ollama.com](https://ollama.com)
2. Sign in to your account
3. Navigate to API settings
4. Generate an API key

## Usage

### Running the Server

#### stdio mode (default, for Claude Desktop/Cursor)

```bash
# Using the installed command
ollama-websearch-mcp

# Or directly with Python
python -m ollama_websearch_mcp.server
```

#### HTTP mode (for remote usage)

```bash
python -m ollama_websearch_mcp.server --http
```

The server will start on `http://localhost:8000/mcp` by default.

### Claude Desktop Integration

Add the following to your Claude Desktop configuration:

**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`

**Windows**: `%APPDATA%/Claude/claude_desktop_config.json`

```json
{
  "mcpServers": {
    "ollama-websearch": {
      "command": "ollama-websearch-mcp",
      "env": {
        "OLLAMA_API_KEY": "your-api-key-here"
      }
    }
  }
}
```

Or with a custom Python environment:

```json
{
  "mcpServers": {
    "ollama-websearch": {
      "command": "/path/to/venv/bin/python",
      "args": ["-m", "ollama_websearch_mcp.server"],
      "env": {
        "OLLAMA_API_KEY": "your-api-key-here"
      }
    }
  }
}
```

### Cursor Integration

Add to Cursor settings (or `.cursor/mcp.json` in project):

```json
{
  "mcpServers": {
    "ollama-websearch": {
      "command": "ollama-websearch-mcp",
      "env": {
        "OLLAMA_API_KEY": "your-api-key-here"
      }
    }
  }
}
```

### MCPorter Integration

MCPorter can discover and use this MCP server. Create a config file:

```json
// config/mcporter.json
{
  "mcpServers": {
    "ollama-websearch": {
      "description": "Ollama web search and web fetch MCP server",
      "command": "ollama-websearch-mcp",
      "env": {
        "OLLAMA_API_KEY": "$env:OLLAMA_API_KEY"
      }
    }
  }
}
```

Or run ad-hoc:

```bash
# List tools
npx mcporter list ollama-websearch

# Call a tool
npx mcporter call ollama-websearch.web_search query:python max_results:10
```

## Available Tools

### web_search

Perform a web search using Ollama's hosted search API.

**Parameters:**
- `query` (required): The search query string
- `max_results` (optional): Maximum number of results to return (default: 10)

**Returns:** Dictionary containing search results with title, url, and snippet.

### web_fetch

Fetch the content of a web page.

**Parameters:**
- `url` (required): The absolute URL to fetch

**Returns:** Dictionary containing the fetched content with html, text, and metadata.

## Development

### Setup

```bash
# Create virtual environment
python -m venv .venv
source .venv/bin/activate

# Install with dev dependencies
pip install -e ".[dev]"
```

### Running Tests

```bash
# Run all tests
pytest

# Run a single test
pytest tests/test_server.py::TestWebSearch::test_web_search_returns_dict

# Run with verbose output
pytest -v

# Run with coverage
pytest --cov=src --cov-report=html
```

### Linting

```bash
# Check code style
ruff check src/ tests/

# Auto-fix issues
ruff check src/ tests/ --fix
```

### Running the Server for Development

```bash
# stdio mode with mcp dev
mcp dev src/ollama_websearch_mcp/server.py

# Or run directly
python -m ollama_websearch_mcp.server
```

## License

MIT

TDQS

A3.7/5.0

Scored across 2 tools

Disambiguation5/5

Web search and web fetch are clearly distinct operations with no overlap. An agent can easily tell them apart based on their names and descriptions.

Naming Consistency5/5

Both tools follow the same web_<verb> pattern, making the naming predictable and consistent. The convention is uniform across the entire set.

Tool Count3/5

Only two tools are provided, which feels thin for a general-purpose websearch server. The count is borderline but acceptable for a narrow scope.

Completeness4/5

Search and fetch cover the core operations for a websearch tool. Minor gaps exist (e.g., no advanced filtering or content extraction options), but no critical dead ends are apparent.

Maintenance

ActivityInactive
ResponsivenessNo issues