Skip to main content
Glama
README.md
# ronzz-gptsearch

Vendored, patched [gptr-mcp](https://github.com/assafelovic/gptr-mcp) — the
Model Context Protocol server for [GPT Researcher](https://gptr.dev) — as
deployed on **LinuxServer2** for [Open WebUI](https://llm.ronzz.org) at ronzz.org.

This is a **backup of the patched source**, not a GitHub fork. Upstream is
tracked manually; the diff against upstream `master` is listed below.
Upstream docs are preserved at [`docs/upstream-README.md`](docs/upstream-README.md).

## Why a patched build

The official `gptresearcher/gpt-researcher` image is **amd64-only**, and the
full GPT Researcher app has no hosted service. LinuxServer2 is **aarch64**, so
the MCP server is built from source (`python:3.11-slim`, arch-agnostic) with
the fixes below.

## Patches vs upstream

| File | Change | Reason |
|---|---|---|
| `server.py` | Docker auto-detection no longer overrides an explicit `MCP_TRANSPORT` | Upstream forces **SSE** inside Docker; Open WebUI supports **Streamable HTTP only** |
| `server.py` | Startup no longer hard-exits without `OPENAI_API_KEY` (warns instead) | We use the native `deepseek` provider (`DEEPSEEK_API_KEY`) |
| `Dockerfile` | Installs runtime system libs (`libmagic1`, `libpango`/`libpangocairo`/`libcairo`/`libgdk-pixbuf`, `libffi8`, `shared-mime-info`, `poppler-utils`); purges the build toolchain after `pip install` | Upstream installs none — WeasyPrint / `python-magic` (via `unstructured`) fail at import |
| `requirements.txt` | Adds `tavily-python`, `ddgs` | gpt-researcher's metadata does not declare the retriever backends |
| `.dockerignore` | New — excludes `.env`, `logs/`, `.git/`, `tests/` | Prevent secrets / local state baking into the image |

## Deployment (LinuxServer2)

- Source: `/opt/gptr-mcp/` · container `gptr-mcp` (`gptr-mcp:v1`), `127.0.0.1:8000`,
  `mem_limit 2g`, joins the external network `openwebui_default`
- Open WebUI connection: id `gptr` → `http://gptr-mcp:8000/mcp` (Streamable HTTP, auth none)
- Full runbook (gated): `https://wikibase.ronzz.org/wiki/RonzzIT:Runbook/OpenWebUI`
- Registration script: [`deploy/register-gptrmcp.sh`](deploy/register-gptrmcp.sh)

```bash
cd /opt/gptr-mcp
docker compose up -d                              # recreate after any .env change
docker compose build && docker compose up -d      # after editing source/requirements.txt
```

## Configuration

Copy [`.env.example`](.env.example) to `.env` (mode `0600`) and fill the keys.
`CONTEXT_FILTER=keyword` selects BM25 and needs no embedding provider; a
non-empty `OPENAI_API_KEY` is still required because GPT Researcher builds the
embedding client eagerly at startup (it is never called in keyword mode).

## Tools exposed

`deep_research`, `quick_search`, `write_report`, `get_research_sources`,
`get_research_context`.

## License

MIT — see [`LICENSE`](LICENSE). Upstream © Assaf Elovic and contributors.