Skip to main content
Glama
lars-dreier

duck-poacher-mcp

by lars-dreier
README.md
# duck-poacher-mcp

A [Model Context Protocol](https://modelcontextprotocol.io) server that exposes
DuckDuckGo web and image search to MCP clients (Claude Desktop, Claude Code, and
others). It wraps the [`duck-poacher`](https://github.com/lars-dreier/duck-poacher)
scraper.

## Tools

| Tool | Arguments | Returns |
|------|-----------|---------|
| `web_search` | `query` | JSON array of `{ title, url, description }` |
| `image_search` | `query`, optional `time` / `size` / `color` / `type` / `layout` / `license` / `safeSearch` | JSON array of `{ thumbnailUrl, imageUrl }` |

Both tools return their results as a JSON string. A failed
scrape (token/URL could not be read, upstream HTTP error) comes back as a tool
result with `isError: true` and the message.

## Use with an MCP client

Run the published binary over stdio. With Claude Code:

```sh
claude mcp add duck-poacher -- npx -y duck-poacher-mcp
```

Or configure it directly (e.g. Claude Desktop's `claude_desktop_config.json`):

```json
{
  "mcpServers": {
    "duck-poacher": {
      "command": "npx",
      "args": ["-y", "duck-poacher-mcp"]
    }
  }
}
```

### LM Studio

Edit LM Studio's `mcp.json` (Program tab → **Edit mcp.json**) and add the same entry:

```json
{
  "mcpServers": {
    "duck-poacher": {
      "command": "npx",
      "args": ["-y", "duck-poacher-mcp"]
    }
  }
}
```

## Develop

```sh
npm install
npm test          # live integration specs — hit DuckDuckGo, need network
npm run build     # bundle to dist/ (ESM), bin → dist/cli.mjs
```

Inspect the tools interactively with the MCP Inspector:

```sh
npm run build
npx @modelcontextprotocol/inspector node dist/cli.mjs
```

See [`.claude/documentation/`](.claude/documentation/index.md) for the code-style
and testing conventions this project follows.

## License

ISC © Lars Dreier

TDQS

A4.2/5.0

Scored across 2 tools

Disambiguation5/5

The two tools are clearly distinct: one returns text results, the other returns image results. There is no overlap in purpose or output.

Naming Consistency5/5

Both tools follow a consistent verb_noun pattern (web_search, image_search), making their actions and targets immediately clear.

Tool Count3/5

With only two tools covering web and image search, the count is minimal but not unreasonable for a focused search server. It feels slightly thin but not extreme.

Completeness3/5

The tool set covers basic text and image search, but lacks common search types like news or video. The absence of these creates notable gaps for a general-purpose search server.

Maintenance

ActivityStale
ResponsivenessNo issues