Skip to content

Commit 714e3e1

Browse files
committed
Add test for blocking tools/call for ignored tools with delete* filter
1 parent 61a2d2b commit 714e3e1

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed

src/lib/utils.test.ts

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -708,4 +708,68 @@ describe('Feature: MCP Proxy', () => {
708708
}),
709709
)
710710
})
711+
712+
it('Scenario: Block tools/call for ignored tools with delete* filter', async () => {
713+
// Given mock transports for client and server
714+
const mockTransportToClient = {
715+
send: vi.fn().mockResolvedValue(undefined),
716+
close: vi.fn().mockResolvedValue(undefined),
717+
start: vi.fn().mockResolvedValue(undefined),
718+
onmessage: vi.fn(),
719+
onclose: vi.fn(),
720+
onerror: vi.fn(),
721+
} as unknown as Transport
722+
723+
const mockTransportToServer = {
724+
send: vi.fn().mockResolvedValue(undefined),
725+
close: vi.fn().mockResolvedValue(undefined),
726+
start: vi.fn().mockResolvedValue(undefined),
727+
onmessage: vi.fn(),
728+
onclose: vi.fn(),
729+
onerror: vi.fn(),
730+
} as unknown as Transport
731+
732+
// When setting up the proxy with delete* filter
733+
mcpProxy({
734+
transportToClient: mockTransportToClient,
735+
transportToServer: mockTransportToServer,
736+
ignoredTools: ['delete*'],
737+
})
738+
739+
// And when client tries to call a deleteTask tool
740+
const toolsCallMessage = {
741+
jsonrpc: '2.0' as const,
742+
method: 'tools/call',
743+
id: '3',
744+
params: {
745+
name: 'deleteTask',
746+
arguments: {
747+
taskId: '1',
748+
},
749+
_meta: {
750+
progressToken: 1,
751+
},
752+
},
753+
}
754+
755+
// Simulate client sending the tools/call message
756+
if (mockTransportToClient.onmessage) {
757+
mockTransportToClient.onmessage(toolsCallMessage)
758+
}
759+
760+
// Then the call should NOT be forwarded to the server
761+
expect(mockTransportToServer.send).not.toHaveBeenCalled()
762+
763+
// And an error response should be sent back to the client
764+
expect(mockTransportToClient.send).toHaveBeenCalledWith(
765+
expect.objectContaining({
766+
jsonrpc: '2.0',
767+
id: '3',
768+
error: expect.objectContaining({
769+
code: expect.any(Number),
770+
message: expect.stringContaining('Tool "deleteTask" is not available'),
771+
}),
772+
}),
773+
)
774+
})
711775
})

0 commit comments

Comments
 (0)