Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions packages/server/src/server/mcp.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,15 @@ export class McpServer {

constructor(serverInfo: Implementation, options?: ServerOptions) {
this.server = new Server(serverInfo, options);
if (options?.capabilities?.tools) {
this.setToolRequestHandlers();
}
if (options?.capabilities?.resources) {
this.setResourceRequestHandlers();
}
if (options?.capabilities?.prompts) {
this.setPromptRequestHandlers();
}
}

/**
Expand Down
65 changes: 65 additions & 0 deletions test/integration/test/server/mcp.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1280,6 +1280,71 @@ describe('Zod v4', () => {
mcpServer.registerTool('tool2', {}, () => ({ content: [] }));
});

test('should list no tools when the tools capability is declared without registrations', async () => {
const mcpServer = new McpServer(
{
name: 'test server',
version: '1.0'
},
{ capabilities: { tools: {} } }
);
const client = new Client({
name: 'test client',
version: '1.0'
});

const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
await Promise.all([client.connect(clientTransport), mcpServer.server.connect(serverTransport)]);

const result = await client.request({ method: 'tools/list' });

expect(result.tools).toEqual([]);
});

test('should list no prompts when the prompts capability is declared without registrations', async () => {
const mcpServer = new McpServer(
{
name: 'test server',
version: '1.0'
},
{ capabilities: { prompts: {} } }
);
const client = new Client({
name: 'test client',
version: '1.0'
});

const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
await Promise.all([client.connect(clientTransport), mcpServer.server.connect(serverTransport)]);

const result = await client.request({ method: 'prompts/list' });

expect(result.prompts).toEqual([]);
});

test('should list no resources when the resources capability is declared without registrations', async () => {
const mcpServer = new McpServer(
{
name: 'test server',
version: '1.0'
},
{ capabilities: { resources: {} } }
);
const client = new Client({
name: 'test client',
version: '1.0'
});

const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
await Promise.all([client.connect(clientTransport), mcpServer.server.connect(serverTransport)]);

const resources = await client.request({ method: 'resources/list' });
const templates = await client.request({ method: 'resources/templates/list' });

expect(resources.resources).toEqual([]);
expect(templates.resourceTemplates).toEqual([]);
});

/***
* Test: Tool with Output Schema and Structured Content
*/
Expand Down
Loading