Skip to main content
Glama
HughesCuit

Heventure Search MCP

by HughesCuit
README.md
<!-- mcp-name: io.github.HughesCuit/heventure-search-mcp -->
[**δΈ­ζ–‡**](./README_CN.md) | English

---

[![PyPI version](https://img.shields.io/pypi/v/heventure-search-mcp.svg)](https://pypi.org/project/heventure-search-mcp/)
[![Python](https://img.shields.io/pypi/pyversions/heventure-search-mcp.svg)](https://pypi.org/project/heventure-search-mcp/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Downloads](https://img.shields.io/pypi/dm/heventure-search-mcp.svg)](https://pypi.org/project/heventure-search-mcp/)
[![heventure-search-mcp MCP server](https://glama.ai/mcp/servers/HughesCuit/heventure-search-mcp/badges/score.svg)](https://glama.ai/mcp/servers/HughesCuit/heventure-search-mcp)

# πŸ” MCP Web Search Server

> **Free forever. No API key required.** A web search MCP server that works out of the box with Claude Desktop, Cursor, and any MCP-compatible AI tool.

```bash
pip install heventure-search-mcp
```

## ✨ Why?

Most MCP search servers require you to sign up for API keys (Bing, Google, SerpAPI...). This one works **immediately** β€” zero configuration, zero cost, zero sign-ups.

| Feature | This Server | Others |
|---------|:-----------:|:------:|
| No API key needed | βœ… | ❌ |
| DuckDuckGo (free) | βœ… | varies |
| Bing (free) | βœ… | ❌ |
| Google (free) | βœ… | ❌ |
| Optional SerpAPI/Tavily | βœ… | βœ… |
| Async + caching | βœ… | varies |
| Install in 10 seconds | βœ… | varies |

## πŸš€ Quick Start

### Option 1: Claude Desktop / Cursor

Add to your MCP config:

```json
{
  "mcpServers": {
    "web-search": {
      "command": "uvx",
      "args": ["heventure-search-mcp"]
    }
  }
}
```

### Option 2: Command Line

```bash
pip install heventure-search-mcp
heventure-search-mcp
```

### Option 3: Docker

```bash
docker run -p 8080:8080 heventure-search-mcp
```

## πŸ”§ Available Tools

### `web_search`

Search the web with multiple engines simultaneously.

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `query` | string | *required* | Search query |
| `max_results` | int | 10 | Number of results (1-20) |
| `search_engine` | string | `"both"` | `duckduckgo`, `bing`, `google`, or `both` |

### `get_page_content`

Extract readable text from any webpage.

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `url` | string | *required* | Page URL to fetch |

## πŸ”‘ Optional: Enhanced Search

The free engines work great for most use cases. For higher quality results, you can optionally add paid API keys:

```bash
# SerpAPI β€” 100 free searches/month
export SERPAPI_KEY="your_key"

# Tavily β€” 1,000 free searches/month  
export TAVILY_API_KEY="your_key"
```

## πŸ—οΈ Architecture

- **Engines**: DuckDuckGo, Bing, Google, SerpAPI, Tavily
- **Caching**: LRU cache with 300s TTL (100 entries max)
- **Protocol**: MCP (Model Context Protocol)
- **Runtime**: Python 3.10+ with asyncio

## 🀝 Contributing

Issues and Pull Requests are welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.

## πŸ“„ License

MIT License β€” use it however you want.

TDQS

A4.6/5.0

Scored across 2 tools

Disambiguation5/5

The two tools have clearly distinct purposes: one searches the web, the other retrieves content from a specific URL. There is no overlap in functionality, and their descriptions make the differentiation explicit.

Naming Consistency5/5

Both tool names follow a consistent verb_noun pattern: 'web_search' and 'get_webpage_content'. The naming is clear, predictable, and uses underscores consistently.

Tool Count4/5

With only two tools, the server is minimal but well-scoped for a search-and-retrieve workflow. While more tools could be added (e.g., for advanced filtering or caching), the current count fits the server's stated purpose without being too thin.

Completeness5/5

The tool set covers the basic search workflow: find pages via web_search, then extract content via get_webpage_content. There are no obvious gaps for the intended use case of retrieving text from web pages.

Maintenance

ActivityInactive
ResponsivenessResponsive