That diagnosis is mostly right, but I’d be careful with fix #1.
I checked the current firecrawl-mcp package and Firecrawl self-host compose: the MCP config you pasted only points the MCP server at your Firecrawl API (http://beelink:3002). Scrape/search goes through that API and works.
But BROWSER_SERVICE_URL does not appear to be part of the normal Firecrawl self-host docs/compose path. The compose file has PLAYWRIGHT_MICROSERVICE_URL=http://playwright-service:3000/scrape, which is for scraping fallback — not necessarily the same thing as the MCP “browser session” backend. So I would not assume you can just run any generic Playwright/Puppeteer server and set BROWSER_SERVICE_URL; it likely has to be the specific browser-service API Firecrawl expects.
My practical recommendation: use OpenClaw’s native browser/agent-browser path for credentialed pages, and use Firecrawl for extraction once you’re on public/scrapable pages. That’s the least cursed setup:
- Firecrawl self-host: great for scrape/search/extraction
- OpenClaw browser automation: better for login, cookies, clicking, credentialed sessions
- Firecrawl MCP browser tools: likely not fully supported by the basic self-host stack you’re running
If you want to keep chasing the Firecrawl route, I’d ask/check Firecrawl upstream specifically: “Does self-hosted Firecrawl support firecrawl_browser_create / firecrawl_interact, and what service provides BROWSER_SERVICE_URL?” Because from the docs I found, that missing piece isn’t documented as part of the standard Docker install.