Skip to content

Commit 614a75b

Browse files
committed
Ensure we distinguish between listing resources and listing resource templates errors
1 parent af6ec21 commit 614a75b

File tree

5 files changed

+32
-2
lines changed

5 files changed

+32
-2
lines changed

internal/api/resources.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -283,10 +283,10 @@ func handleServerResourceTemplates(
283283
if strings.Contains(err.Error(), methodNotFoundMessage) {
284284
return nil, fmt.Errorf("%w: %s", errors.ErrResourcesNotImplemented, name)
285285
}
286-
return nil, fmt.Errorf("%w: %s: %w", errors.ErrResourceListFailed, name, err)
286+
return nil, fmt.Errorf("%w: %s: %w", errors.ErrResourceTemplateListFailed, name, err)
287287
}
288288
if result == nil {
289-
return nil, fmt.Errorf("%w: %s: no result", errors.ErrResourceListFailed, name)
289+
return nil, fmt.Errorf("%w: %s: no result", errors.ErrResourceTemplateListFailed, name)
290290
}
291291

292292
templates := make([]ResourceTemplate, 0, len(result.ResourceTemplates))

internal/api/resources_test.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,23 @@ func TestAPI_HandleServerResourceTemplates_ServerNotFound(t *testing.T) {
196196
require.True(t, errors.Is(err, internalerrors.ErrServerNotFound))
197197
}
198198

199+
func TestAPI_HandleServerResourceTemplates_ListError(t *testing.T) {
200+
t.Parallel()
201+
202+
mockClient := &mockMCPClient{
203+
listTemplatesError: errors.New("template list failed"),
204+
}
205+
206+
accessor := newMockMCPClientAccessor()
207+
accessor.Add("test-server", mockClient, []string{})
208+
209+
result, err := handleServerResourceTemplates(accessor, "test-server", "")
210+
211+
require.Error(t, err)
212+
require.Nil(t, result)
213+
require.True(t, errors.Is(err, internalerrors.ErrResourceTemplateListFailed))
214+
}
215+
199216
func TestAPI_HandleServerResourceContent_TextContent(t *testing.T) {
200217
t.Parallel()
201218

internal/daemon/api_server.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,9 @@ func mapError(logger hclog.Logger, err error) huma.StatusError {
212212
case stdErrors.Is(err, errors.ErrResourceListFailed):
213213
logger.Error("Resource list failed", "error", err)
214214
return huma.Error502BadGateway("MCP server error listing resources", err)
215+
case stdErrors.Is(err, errors.ErrResourceTemplateListFailed):
216+
logger.Error("Resource template list failed", "error", err)
217+
return huma.Error502BadGateway("MCP server error listing resource templates", err)
215218
case stdErrors.Is(err, errors.ErrResourceReadFailed):
216219
logger.Error("Resource read failed", "error", err)
217220
return huma.Error502BadGateway("MCP server error reading resource", err)

internal/daemon/api_server_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,11 @@ func TestMapError(t *testing.T) {
377377
err: errors.ErrResourceListFailed,
378378
expectedStatus: 502,
379379
},
380+
{
381+
name: "ErrResourceTemplateListFailed maps to 502",
382+
err: errors.ErrResourceTemplateListFailed,
383+
expectedStatus: 502,
384+
},
380385
{
381386
name: "ErrResourceReadFailed maps to 502",
382387
err: errors.ErrResourceReadFailed,

internal/errors/errors.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,11 @@ var (
8888
// Recommended to map to HTTP 502 Bad Gateway.
8989
ErrResourceListFailed = errors.New("resource list failed")
9090

91+
// ErrResourceTemplateListFailed indicates that listing resource templates from an MCP server failed.
92+
// This represents a communication or protocol error with the external MCP server.
93+
// Recommended to map to HTTP 502 Bad Gateway.
94+
ErrResourceTemplateListFailed = errors.New("resource template list failed")
95+
9196
// ErrResourceReadFailed indicates that reading a resource from an MCP server failed.
9297
// This represents a communication or protocol error with the external MCP server.
9398
// Recommended to map to HTTP 502 Bad Gateway.

0 commit comments

Comments
 (0)