From e120c25da061e64330d8f986f98d3b50cda95aca Mon Sep 17 00:00:00 2001 From: Snider Date: Fri, 17 Apr 2026 18:45:43 +0100 Subject: [PATCH] Harden screen list query failures --- pkg/mcp/mcp_test.go | 18 ++++++++++++++++++ pkg/mcp/tools_screen.go | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/pkg/mcp/mcp_test.go b/pkg/mcp/mcp_test.go index 2319f73e..511ce097 100644 --- a/pkg/mcp/mcp_test.go +++ b/pkg/mcp/mcp_test.go @@ -74,6 +74,24 @@ func TestMCP_Bad_NoServices(t *testing.T) { assert.False(t, r.OK) } +func TestSubsystem_Bad_CallTool_ScreenListMalformedQuery(t *testing.T) { + c := core.New(core.WithServiceLock()) + c.RegisterQuery(func(_ *core.Core, q core.Query) core.Result { + if _, ok := q.(screen.QueryAll); ok { + return core.Result{Value: "malformed screen query payload", OK: false} + } + return core.Result{} + }) + + sub := New(c) + server := mcp.NewServer(&mcp.Implementation{Name: "test", Version: "0.1.0"}, nil) + sub.RegisterTools(server) + + _, err := sub.CallTool(context.Background(), "screen_list", nil) + require.Error(t, err) + assert.Contains(t, err.Error(), "screen query failed") +} + type manifestScreenPlatform struct{} type manifestBrowserPlatform struct { diff --git a/pkg/mcp/tools_screen.go b/pkg/mcp/tools_screen.go index 6dd3782a..08d0a5c2 100644 --- a/pkg/mcp/tools_screen.go +++ b/pkg/mcp/tools_screen.go @@ -24,7 +24,7 @@ func (s *Subsystem) screenList(_ context.Context, _ *mcp.CallToolRequest, _ Scre if e, ok := r.Value.(error); ok { return nil, ScreenListOutput{}, e } - return nil, ScreenListOutput{}, nil + return nil, ScreenListOutput{}, coreerr.E("mcp.screenList", "screen query failed", nil) } screens, ok := r.Value.([]screen.Screen) if !ok {