@@ -50,11 +50,11 @@ func (h *APIHandlers) RegisterRoutes(mux *http.ServeMux /* or other router type
5050 // For GET requests on server details, tools
5151 mux .HandleFunc ("GET /api/mcp/servers/" , h .routeServerGetRequests )
5252
53- // For PUT requests (update server)
54- mux .HandleFunc ("PUT /api/mcp/servers/" , h .routeServerPutRequests )
53+ // For update requests (update server)
54+ mux .HandleFunc ("POST /api/mcp/servers/update/ " , h .routeServerUpdateRequests )
5555
56- // For DELETE requests (remove server)
57- mux .HandleFunc ("DELETE /api/mcp/servers/" , h .routeServerDeleteRequests )
56+ // For delete requests (remove server)
57+ mux .HandleFunc ("POST /api/mcp/servers/remove /" , h .routeServerDeleteRequests )
5858
5959 // For POST requests (rediscover tools)
6060 mux .HandleFunc ("POST /api/mcp/servers/" , h .routeServerPostRequests )
@@ -67,9 +67,6 @@ func (h *APIHandlers) RegisterRoutes(mux *http.ServeMux /* or other router type
6767 mux .HandleFunc ("GET /api/docs/openapi.yaml" , h .ServeOpenAPISpec )
6868 mux .HandleFunc ("GET /api/docs" , h .ServeSwaggerUI )
6969 mux .HandleFunc ("GET /api/docs/" , h .ServeSwaggerUI )
70-
71- // Root handler - REMOVED to avoid conflict with redirect in app.go
72- // mux.HandleFunc("/", h.rootHandler)
7370}
7471
7572// HealthCheck handles GET /api/health
@@ -82,7 +79,7 @@ func (h *APIHandlers) HealthCheck(w http.ResponseWriter, _ *http.Request) {
8279// routeServerGetRequests handles GET requests for server-specific paths and routes to appropriate handlers
8380func (h * APIHandlers ) routeServerGetRequests (w http.ResponseWriter , r * http.Request ) {
8481 // Extract server ID and subpath
85- serverID , subpath , err := parseServerPath (r .URL .Path )
82+ serverID , subpath , err := parseServerPath (r .URL .Path , "/api/mcp/servers/" )
8683 if err != nil {
8784 http .Error (w , err .Error (), http .StatusBadRequest )
8885 return
@@ -104,7 +101,7 @@ func (h *APIHandlers) routeServerGetRequests(w http.ResponseWriter, r *http.Requ
104101// routeServerPostRequests handles POST requests for server-specific paths and routes to appropriate handlers
105102func (h * APIHandlers ) routeServerPostRequests (w http.ResponseWriter , r * http.Request ) {
106103 // Extract server ID and subpath
107- serverID , subpath , err := parseServerPath (r .URL .Path )
104+ serverID , subpath , err := parseServerPath (r .URL .Path , "/api/mcp/servers/" )
108105 if err != nil {
109106 http .Error (w , err .Error (), http .StatusBadRequest )
110107 return
@@ -123,20 +120,20 @@ func (h *APIHandlers) routeServerPostRequests(w http.ResponseWriter, r *http.Req
123120 }
124121}
125122
126- // routeServerPutRequests handles PUT requests for server-specific paths
127- func (h * APIHandlers ) routeServerPutRequests (w http.ResponseWriter , r * http.Request ) {
128- serverID , subpath , err := parseServerPath (r .URL .Path )
123+ // routeServerUpdateRequests handles PUT requests for server-specific paths
124+ func (h * APIHandlers ) routeServerUpdateRequests (w http.ResponseWriter , r * http.Request ) {
125+ serverID , subpath , err := parseServerPath (r .URL .Path , "/api/mcp/servers/update/" )
129126 if err != nil {
130127 http .Error (w , err .Error (), http .StatusBadRequest )
131128 return
132129 }
133130
134131 switch subpath {
135132 case "" :
136- // PUT /api/mcp/servers/:id - Update server name/url
133+ // POST /api/mcp/servers/update /:id - Update server name/url
137134 h .UpdateMCPServer (w , r , serverID )
138135 case "status" :
139- // PUT /api/mcp/servers/:id/status - Update server connection status
136+ // POST /api/mcp/servers/update /:id/status - Update server connection status
140137 h .UpdateMCPServerStatus (w , r , serverID )
141138 default :
142139 http .NotFound (w , r )
@@ -145,15 +142,15 @@ func (h *APIHandlers) routeServerPutRequests(w http.ResponseWriter, r *http.Requ
145142
146143// routeServerDeleteRequests handles DELETE requests for server-specific paths (Recommended structure)
147144func (h * APIHandlers ) routeServerDeleteRequests (w http.ResponseWriter , r * http.Request ) {
148- serverID , subpath , err := parseServerPath (r .URL .Path )
145+ serverID , subpath , err := parseServerPath (r .URL .Path , "/api/mcp/servers/remove/" )
149146 if err != nil {
150147 http .Error (w , err .Error (), http .StatusBadRequest )
151148 return
152149 }
153150
154151 switch subpath {
155152 case "" :
156- // DELETE /api/mcp/servers/:id - Remove server
153+ // POST /api/mcp/servers/remove /:id - Remove server
157154 h .RemoveMCPServer (w , r , serverID )
158155 default :
159156 http .NotFound (w , r )
@@ -162,9 +159,9 @@ func (h *APIHandlers) routeServerDeleteRequests(w http.ResponseWriter, r *http.R
162159
163160// parseServerPath extracts the server ID and subpath from a URL path
164161// Returns serverID, subpath, error
165- func parseServerPath (path string ) (int64 , string , error ) {
166- // Extract path after /api/mcp/servers/
167- path = path [len ("/api/mcp/servers/" ):]
162+ func parseServerPath (path string , prefix string ) (int64 , string , error ) {
163+ // Extract path after prefix
164+ path = path [len (prefix ):]
168165
169166 // Split the remaining path
170167 parts := splitPath (path )
@@ -189,42 +186,37 @@ func parseServerPath(path string) (int64, string, error) {
189186
190187// --- MCP Server Handlers ---
191188
192- type addServerRequest struct {
193- Name string `json:"name"`
194- URL string `json:"url"`
195- }
196-
197189// AddMCPServer handles POST /api/mcp/servers
198190func (h * APIHandlers ) AddMCPServer (w http.ResponseWriter , r * http.Request ) {
199- var req addServerRequest
200- if err := json .NewDecoder (r .Body ).Decode (& req ); err != nil {
201- http .Error (w , fmt .Sprintf ("Invalid request body: %v" , err ), http .StatusBadRequest )
191+ // Parse form data
192+ if err := r .ParseForm (); err != nil {
193+ h .logger .Error ().Err (err ).Msg ("Failed to parse form data" )
194+ http .Redirect (w , r , "/error?error=Form parse error" , http .StatusSeeOther )
202195 return
203196 }
204197
205- if req .Name == "" || req .URL == "" {
206- http .Error (w , "Server name and URL are required" , http .StatusBadRequest )
198+ name := r .FormValue ("name" )
199+ url := r .FormValue ("url" )
200+
201+ if name == "" || url == "" {
202+ http .Redirect (w , r , "/error?error=Missing name or url" , http .StatusSeeOther )
207203 return
208204 }
209205
210- newServer , err := h .backendService .AddMCPServer (req . Name , req . URL )
206+ _ , err := h .backendService .AddMCPServer (name , url )
211207 if err != nil {
212208 h .logger .Error ().Err (err ).Msg ("Error adding MCP server via API" )
213- // TODO: Check error type for user-friendly messages (e.g., duplicate URL)
214- if err .Error () == fmt .Sprintf ("MCP server with URL '%s' already exists" , req . URL ) {
215- http .Error (w , err . Error (), http . StatusConflict ) // 409 Conflict
209+
210+ if err .Error () == fmt .Sprintf ("MCP server with URL '%s' already exists" , url ) {
211+ http .Redirect (w , r , "/error?error=Server already exists" , http . StatusSeeOther )
216212 return
217213 }
218- http .Error (w , fmt .Sprintf ("Failed to add server: %v" , err ), http .StatusInternalServerError )
214+
215+ http .Redirect (w , r , "/error?error=Internal server error" , http .StatusSeeOther )
219216 return
220217 }
221218
222- w .Header ().Set ("Content-Type" , "application/json" )
223- w .WriteHeader (http .StatusCreated ) // 201 Created
224- if err := json .NewEncoder (w ).Encode (newServer ); err != nil {
225- h .logger .Error ().Err (err ).Msg ("Error encoding added server response" )
226- // Header already sent, can't change status code
227- }
219+ http .Redirect (w , r , "/success" , http .StatusSeeOther )
228220}
229221
230222// ListMCPServers handles GET /api/mcp/servers - Returns full JSON
@@ -345,22 +337,22 @@ func (h *APIHandlers) UpdateMCPServer(w http.ResponseWriter, r *http.Request, se
345337 }
346338}
347339
348- // RemoveMCPServer handles DELETE /api/mcp/servers/:id
340+ // RemoveMCPServer handles POST /api/mcp/servers/:id
349341func (h * APIHandlers ) RemoveMCPServer (w http.ResponseWriter , r * http.Request , serverID int64 ) {
350- // ID is now parsed in routeServerDeleteRequests
351342 err := h .backendService .RemoveMCPServer (serverID )
343+
352344 if err != nil {
353345 h .logger .Error ().Err (err ).Int64 ("serverId" , serverID ).Msg ("Error removing MCP server via API" )
354- // Check if error is "not found" vs other internal errors
355- if strings .Contains (err .Error (), "not found" ) { // Basic check
356- http .Error (w , err . Error (), http .StatusNotFound )
346+
347+ if strings .Contains (err .Error (), "not found" ) {
348+ http .Redirect (w , r , "/error?error=Server not found" , http .StatusSeeOther )
357349 } else {
358- http .Error (w , " Failed to remove server" , http .StatusInternalServerError )
350+ http .Redirect (w , r , "/error?error= Failed to remove server" , http .StatusSeeOther )
359351 }
360352 return
361353 }
362354
363- w . WriteHeader ( http .StatusNoContent ) // 204 No Content on successful delete
355+ http .Redirect ( w , r , "/success" , http . StatusSeeOther )
364356}
365357
366358// --- Tool Management Handlers ---
0 commit comments