Any stdio client
The server uses the stdio transport only (the SSE transport was removed in v2.x). A client launches it as a subprocess and exchanges JSON-RPC messages over stdin and stdout; logs go to stderr.
Command
Section titled “Command”doc-scraper mcp-server -config /path/to/config.yamlMost clients take the command in this shape:
{ "command": "/path/to/doc-scraper", "args": ["mcp-server", "-config", "/path/to/config.yaml"], "env": {}}Use absolute paths, both here and for output_base_dir and state_dir inside the config: the client decides the server’s working directory.
A raw session
Section titled “A raw session”An initialize handshake followed by a list_sites call, piped straight into the server:
printf '%s\n' \ '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"demo","version":"0"}}}' \ '{"jsonrpc":"2.0","method":"notifications/initialized"}' \ '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"list_sites","arguments":{}}}' \ | doc-scraper mcp-server -config /tmp/mcpdemo/config.yaml 2>/dev/null{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-11-25","capabilities":{"logging":{},"tools":{"listChanged":true}},"serverInfo":{"name":"doc-scraper","version":"2.11.0"}}}{"jsonrpc":"2.0","id":2,"result":{"content":[{"type":"text","text":"{\n \"config_path\": \"/tmp/mcpdemo/config.yaml\",\n \"sites\": [\n {\n \"domain\": \"example.com\",\n \"key\": \"demo\",\n \"max_depth\": 0,\n \"path_prefix\": \"\",\n \"start_urls_count\": 1\n }\n ],\n \"total_sites\": 1\n}"}]}}Output from doc-scraper 2.11.0, 2026-10-11. Tool results are JSON documents carried in a text content block. The tools and their arguments are listed on MCP tools.