Skip to content

MCP server with valid SSE endpoint not detected by Windsurf #50

Open
@amabrocopopza

Description

@amabrocopopza

I've deployed a custom MCP server (mcp-server-qdrant) behind Traefik, exposing the SSE endpoint at https://mcp-qdrant.cityzen.co.za/sse. The endpoint works fine when tested directly via curl:
curl -N -H "Accept: text/event-stream" https://mcp-qdrant.cityzen.co.za/sse

data: /messages/?session_id=...

However, when I add this server to my Windsurf configuration:

  "mcp": {
    "servers": {
      "qdrant": {
        "transport": "sse",
        "serverUrl": "https://mcp-qdrant.cityzen.co.za/sse"
      }
    }
  }
}

Windsurf fails to detect or list the server in the MCP UI. There are no errors logged, but the server doesn't appear in the interface even after refreshing or rescanning.

✅ Troubleshooting steps attempted:

  • Confirmed the SSE endpoint is publicly reachable and returns correct event: and data: messages.

  • Validated JSON config (no syntax errors).

  • Checked container logs — server starts correctly and streams data.

  • Tried bypassing Traefik and exposing the port directly — same issue.

  • Also tested locally on the same physical machine as the Windsurf client, using localhost to eliminate network or DNS concerns still not picked up.

Here is the relevant Docker Compose setup for reference:

🧱 Docker Compose (Portainer Stack)

Click to expand Docker Compose YAML
services:
  qdrant:
    image: qdrant/qdrant:gpu-nvidia-latest
    container_name: qdrant
    restart: always
    ports:
      - "6333:6333"
      - "6334:6334"
    volumes:
      - /home/homelab/conf/qdrant/data:/qdrant/storage     
    environment:
      - QDRANT__GPU__INDEXING=true
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
    labels:
      traefik.enable: "true"
      traefik.docker.network: "homelab"
      traefik.http.routers.mcp.tls: "true"
      traefik.http.routers.mcp.entrypoints: "https"
      traefik.http.routers.mcp.rule: "Host(`qdrant.cityzen.co.za`)"
      traefik.http.services.mcp.loadbalancer.server.port: "6333"
    networks:
      - homelab

  mcp-qdrant:
    image: mcp-server-qdrant:latest
    container_name: mcp-qdrant
    command: sh -c "uvx mcp-server-qdrant --transport sse"
    networks:
      - homelab
    depends_on:
      - qdrant
    environment:
      - QDRANT_URL=http://qdrant:6333
      - COLLECTION_NAME=code-snippets
      - EMBEDDING_MODEL=sentence-transformers/all-MiniLM-L6-v2
      - EMBEDDING_PROVIDER=fastembed
      - TOOL_STORE_DESCRIPTION=Store reusable code snippets for later retrieval...
      - TOOL_FIND_DESCRIPTION=Search for relevant code snippets based on natural language...
      - LOG_LEVEL=debug
      - QDRANT_VERIFY_SSL=False
    labels:
      traefik.enable: "true"
      traefik.docker.network: "homelab"    
      traefik.http.routers.mcp-qdrant.rule: Host(`mcp-qdrant.cityzen.co.za`) && PathPrefix(`/sse`)
      traefik.http.routers.mcp-qdrant.entrypoints: "https"
      traefik.http.routers.mcp-qdrant.tls: "true"
      traefik.http.services.mcp-qdrant.loadbalancer.server.port: "8000"

networks:
  homelab:
    external: true

🧩 Is there a specific discovery format or required SSE metadata that Windsurf expects beyond the event: endpoint convention?

Thanks for your help — happy to dig deeper or test beta fixes if needed!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions