diff --git a/cmd/gitea-mcp/main.go b/cmd/gitea-mcp/main.go index 6beb226..a942bc6 100644 --- a/cmd/gitea-mcp/main.go +++ b/cmd/gitea-mcp/main.go @@ -54,6 +54,18 @@ func main() { w.WriteHeader(http.StatusOK) _, _ = w.Write([]byte("ok")) }) + mux.HandleFunc("/.well-known/oauth-protected-resource", func(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodGet { + http.Error(w, "method not allowed", http.StatusMethodNotAllowed) + return + } + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusOK) + _, _ = w.Write([]byte(`{"authorization_servers":[]}`)) + }) + mux.HandleFunc("/.well-known/oauth-authorization-server", func(w http.ResponseWriter, r *http.Request) { + http.NotFound(w, r) + }) addr := ":" + cfg.Port logger.Info("gitea-mcp starting", "addr", addr, "version", "0.1.0") diff --git a/internal/mcp/server.go b/internal/mcp/server.go index 613d7c6..ff2dc93 100644 --- a/internal/mcp/server.go +++ b/internal/mcp/server.go @@ -31,6 +31,9 @@ func NewServer(opts ServerOptions) *Server { func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { switch r.Method { + case http.MethodHead: + w.Header().Set("MCP-Protocol-Version", ProtocolVersion) + w.WriteHeader(http.StatusOK) case http.MethodGet: s.handleGET(w, r) case http.MethodPost: diff --git a/internal/mcp/server_test.go b/internal/mcp/server_test.go index 441cd06..7088d98 100644 --- a/internal/mcp/server_test.go +++ b/internal/mcp/server_test.go @@ -118,6 +118,15 @@ func TestPostBodyTooLarge(t *testing.T) { assert.Equal(t, http.StatusBadRequest, rr.Code) } +func TestHEADReturnsMCPProtocolVersionHeader(t *testing.T) { + srv := newServer(t) + req := httptest.NewRequest(http.MethodHead, "/mcp", nil) + rr := httptest.NewRecorder() + srv.ServeHTTP(rr, req) + require.Equal(t, http.StatusOK, rr.Code) + assert.Equal(t, mcp.ProtocolVersion, rr.Header().Get("MCP-Protocol-Version")) +} + func TestToolsCallToolNotFound(t *testing.T) { srv := newServer(t) // Initialize to get a session ID.