Skip to content

Commit c827e15

Browse files
committed
Improve: Add empty array handling to bulk registration methods
- Add early return for empty arrays to avoid unnecessary notifications - Add comprehensive tests for empty array edge cases - Addresses O3 feedback from code review
1 parent 4710c04 commit c827e15

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

src/server/mcp.test.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4625,6 +4625,36 @@ describe("elicitInput()", () => {
46254625
});
46264626
});
46274627

4628+
test("registerTools() should handle empty array gracefully", () => {
4629+
const mcpServer = new McpServer({
4630+
name: "test server",
4631+
version: "1.0",
4632+
});
4633+
4634+
const result = mcpServer.registerTools([]);
4635+
expect(result).toEqual([]);
4636+
});
4637+
4638+
test("registerResources() should handle empty array gracefully", () => {
4639+
const mcpServer = new McpServer({
4640+
name: "test server",
4641+
version: "1.0",
4642+
});
4643+
4644+
const result = mcpServer.registerResources([]);
4645+
expect(result).toEqual([]);
4646+
});
4647+
4648+
test("registerPrompts() should handle empty array gracefully", () => {
4649+
const mcpServer = new McpServer({
4650+
name: "test server",
4651+
version: "1.0",
4652+
});
4653+
4654+
const result = mcpServer.registerPrompts([]);
4655+
expect(result).toEqual([]);
4656+
});
4657+
46284658
test("registerPrompts() should register multiple prompts with single notification", async () => {
46294659
const mcpServer = new McpServer({
46304660
name: "test server",

src/server/mcp.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -677,6 +677,10 @@ export class McpServer {
677677
config: ResourceMetadata;
678678
callback: ReadResourceCallback | ReadResourceTemplateCallback;
679679
}>>(resources: T): (RegisteredResource | RegisteredResourceTemplate)[] {
680+
if (resources.length === 0) {
681+
return [];
682+
}
683+
680684
const results: (RegisteredResource | RegisteredResourceTemplate)[] = [];
681685

682686
// First, validate that none of the resources are already registered
@@ -736,6 +740,10 @@ export class McpServer {
736740
};
737741
callback: PromptCallback<PromptArgsRawShape | undefined>;
738742
}>>(prompts: T): RegisteredPrompt[] {
743+
if (prompts.length === 0) {
744+
return [];
745+
}
746+
739747
const results: RegisteredPrompt[] = [];
740748

741749
// First, validate that none of the prompts are already registered
@@ -1070,6 +1078,10 @@ export class McpServer {
10701078
};
10711079
callback: ToolCallback<ZodRawShape | undefined>;
10721080
}>>(tools: T): RegisteredTool[] {
1081+
if (tools.length === 0) {
1082+
return [];
1083+
}
1084+
10731085
const results: RegisteredTool[] = [];
10741086

10751087
// First, validate that none of the tools are already registered

0 commit comments

Comments
 (0)