Skip to main content
Glama
leeyseo

serper-discover-mcp

by leeyseo
README.md
# Serper Discover MCP

Korean-aware Google search + place discovery, built on the [Serper](https://serper.dev) Google Search API.

## What's different from other Serper MCPs

Most Serper wrappers just expose `search(query)`. This server adds:

- **`discover_places(area, place_type)`** — Generates multiple Google queries from a Korean area name (성수동, 잠실, 강남, …) and a category (attraction/restaurant/cafe/hotel/bar/shopping), then extracts Korean place names from snippets/titles using suffix-based regex (공원/박물관/미술관/카페/식당/호텔/etc.). One call returns dozens of candidate places that you can then verify against an authoritative source.
- **`naver_blog_search`, `naver_cafe_search`** — Domain-scoped helpers for Korean local reviews, where the actual visit experiences live.
- Korean results prioritized by default (`gl=kr`, `hl=ko`).
- 5-minute in-memory cache to avoid redundant API calls.

Originally built for [Daypath](https://daypath.vercel.app) — a Korean travel itinerary planner that uses this server's `discover_places` to find candidates and `naver_blog_search` for verification.

## Tools

| Tool | Description |
|---|---|
| `web_search` | Google search, optional `site` filter |
| `naver_blog_search` | Site-filtered Naver Blog search |
| `naver_cafe_search` | Naver Cafe (community forum) search |
| `discover_places` | Korean place discovery from (area, place_type) |
| `fetch_page` | Extract page body text (strips HTML/scripts) |

## Setup

1. Get a free Serper API key at https://serper.dev (2,500 free searches/month).
2. Install via Smithery:

```bash
npx -y @smithery/cli install serper-discover --client claude
```

Or configure manually in `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "serper-discover": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "-e", "SERPER_API_KEY", "leeyseo/serper-discover-mcp"],
      "env": { "SERPER_API_KEY": "your-key-here" }
    }
  }
}
```

## Example — discover_places

```
discover_places(area="성수동", place_type="cafe", distinction="couple")
```

Returns candidates like `어니언 성수`, `대림창고`, `LCDC 서울`, … extracted from a few targeted Google queries.

## License

MIT