Fix: Respect explicit listChanged: false capability setting (#1513)
This commit is contained in:
parent
65bbceab77
commit
8654c7fd3a
3 changed files with 97 additions and 4 deletions
|
|
@ -117,7 +117,7 @@ export class McpServer {
|
|||
|
||||
this.server.registerCapabilities({
|
||||
tools: {
|
||||
listChanged: true
|
||||
listChanged: this.server.getCapabilities().tools?.listChanged ?? true
|
||||
}
|
||||
});
|
||||
|
||||
|
|
@ -429,7 +429,7 @@ export class McpServer {
|
|||
|
||||
this.server.registerCapabilities({
|
||||
resources: {
|
||||
listChanged: true
|
||||
listChanged: this.server.getCapabilities().resources?.listChanged ?? true
|
||||
}
|
||||
});
|
||||
|
||||
|
|
@ -509,7 +509,7 @@ export class McpServer {
|
|||
|
||||
this.server.registerCapabilities({
|
||||
prompts: {
|
||||
listChanged: true
|
||||
listChanged: this.server.getCapabilities().prompts?.listChanged ?? true
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -452,7 +452,10 @@ export class Server extends Protocol<ServerContext> {
|
|||
return this._clientVersion;
|
||||
}
|
||||
|
||||
private getCapabilities(): ServerCapabilities {
|
||||
/**
|
||||
* Returns the current server capabilities.
|
||||
*/
|
||||
public getCapabilities(): ServerCapabilities {
|
||||
return this._capabilities;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -782,6 +782,96 @@ describe('Zod v4', () => {
|
|||
]);
|
||||
});
|
||||
|
||||
/***
|
||||
* Test: listChanged capability should default to true when not specified
|
||||
*/
|
||||
test('should default tools.listChanged to true when not explicitly set', async () => {
|
||||
const mcpServer = new McpServer({
|
||||
name: 'test server',
|
||||
version: '1.0'
|
||||
});
|
||||
const client = new Client({
|
||||
name: 'test client',
|
||||
version: '1.0'
|
||||
});
|
||||
|
||||
mcpServer.registerTool('test', {}, async () => ({
|
||||
content: [{ type: 'text', text: 'Test' }]
|
||||
}));
|
||||
|
||||
const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
|
||||
await Promise.all([client.connect(clientTransport), mcpServer.connect(serverTransport)]);
|
||||
|
||||
const capabilities = client.getServerCapabilities();
|
||||
expect(capabilities?.tools?.listChanged).toBe(true);
|
||||
});
|
||||
|
||||
/***
|
||||
* Test: listChanged capability should respect explicit false setting
|
||||
*/
|
||||
test('should respect tools.listChanged: false when explicitly set', async () => {
|
||||
const mcpServer = new McpServer({ name: 'test server', version: '1.0' }, { capabilities: { tools: { listChanged: false } } });
|
||||
const client = new Client({
|
||||
name: 'test client',
|
||||
version: '1.0'
|
||||
});
|
||||
|
||||
mcpServer.registerTool('test', {}, async () => ({
|
||||
content: [{ type: 'text', text: 'Test' }]
|
||||
}));
|
||||
|
||||
const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
|
||||
await Promise.all([client.connect(clientTransport), mcpServer.connect(serverTransport)]);
|
||||
|
||||
const capabilities = client.getServerCapabilities();
|
||||
expect(capabilities?.tools?.listChanged).toBe(false);
|
||||
});
|
||||
|
||||
/***
|
||||
* Test: resources.listChanged should respect explicit false setting
|
||||
*/
|
||||
test('should respect resources.listChanged: false when explicitly set', async () => {
|
||||
const mcpServer = new McpServer(
|
||||
{ name: 'test server', version: '1.0' },
|
||||
{ capabilities: { resources: { listChanged: false } } }
|
||||
);
|
||||
const client = new Client({
|
||||
name: 'test client',
|
||||
version: '1.0'
|
||||
});
|
||||
|
||||
mcpServer.registerResource('test://resource', 'Test Resource', async () => ({
|
||||
contents: [{ uri: 'test://resource', text: 'Test' }]
|
||||
}));
|
||||
|
||||
const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
|
||||
await Promise.all([client.connect(clientTransport), mcpServer.connect(serverTransport)]);
|
||||
|
||||
const capabilities = client.getServerCapabilities();
|
||||
expect(capabilities?.resources?.listChanged).toBe(false);
|
||||
});
|
||||
|
||||
/***
|
||||
* Test: prompts.listChanged should respect explicit false setting
|
||||
*/
|
||||
test('should respect prompts.listChanged: false when explicitly set', async () => {
|
||||
const mcpServer = new McpServer({ name: 'test server', version: '1.0' }, { capabilities: { prompts: { listChanged: false } } });
|
||||
const client = new Client({
|
||||
name: 'test client',
|
||||
version: '1.0'
|
||||
});
|
||||
|
||||
mcpServer.registerPrompt('test-prompt', async () => ({
|
||||
messages: [{ role: 'assistant', content: { type: 'text', text: 'Test' } }]
|
||||
}));
|
||||
|
||||
const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
|
||||
await Promise.all([client.connect(clientTransport), mcpServer.connect(serverTransport)]);
|
||||
|
||||
const capabilities = client.getServerCapabilities();
|
||||
expect(capabilities?.prompts?.listChanged).toBe(false);
|
||||
});
|
||||
|
||||
/***
|
||||
* Test: Tool Registration with Parameters
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in a new issue