#!/usr/bin/env python3
"""Use SlopDock's hosted MCP from any stdio MCP client. No third-party packages."""
import json
import os
import sys
from urllib.error import HTTPError, URLError
from urllib.parse import urlsplit
from urllib.request import Request, urlopen

def main():
    address = os.environ.get("SLOPDOCK_URL", "https://slopdock.clawo.ai").rstrip("/")
    token = os.environ.get("SLOPDOCK_TOKEN", "").strip()
    if not token or urlsplit(address).scheme not in ("https", "http"):
        print("Set SLOPDOCK_TOKEN and optionally SLOPDOCK_URL. Never paste secrets into a chat.", file=sys.stderr)
        return 1
    endpoint = address if address.endswith("/mcp") else address + "/mcp"
    version = "2025-03-26"
    for line in sys.stdin:
        message = None
        try:
            if len(line) > 262144:
                raise ValueError("Message too large")
            message = json.loads(line)
            if not isinstance(message, dict):
                raise ValueError("JSON object required")
            request = Request(endpoint, data=json.dumps(message).encode(), headers={
                "Authorization": "Bearer " + token, "Content-Type": "application/json",
                "Accept": "application/json, text/event-stream", "MCP-Protocol-Version": version,
            })
            with urlopen(request, timeout=30) as response:
                body = response.read()
                if not body:
                    continue
                result = json.loads(body)
                if message.get("method") == "initialize":
                    version = result.get("result", {}).get("protocolVersion", version)
                print(json.dumps(result, ensure_ascii=False), flush=True)
        except (HTTPError, URLError, ValueError, TypeError) as error:
            if isinstance(message, dict) and "id" in message:
                status = error.code if isinstance(error, HTTPError) else "connection"
                print(json.dumps({"jsonrpc": "2.0", "id": message["id"],
                                  "error": {"code": -32000, "message": "SlopDock request failed (%s)" % status}}), flush=True)
            else:
                print("SlopDock connection failed. Check server address and workspace key.", file=sys.stderr)
    return 0

if __name__ == "__main__":
    sys.exit(main())
