Allow servers / clients to advertise extensions in the capability object (#1630)

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Tapan Chugh 2026-03-23 17:37:05 -07:00 • committed by GitHub
commit 677511b5a7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -338,6 +338,60 @@ describe('Zod v4', () => {
message: 'Completed step 3 of 3'
});
});
/***
* Test: Extensions capability registration
*/
test('should register and advertise server extensions capability', async () => {
const mcpServer = new McpServer({
name: 'test server',
version: '1.0'
});
const client = new Client({
name: 'test client',
version: '1.0'
});
mcpServer.server.registerCapabilities({
extensions: {
'io.modelcontextprotocol/test-extension': { listChanged: true }
}
});
const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
await Promise.all([client.connect(clientTransport), mcpServer.connect(serverTransport)]);
const capabilities = client.getServerCapabilities();
expect(capabilities?.extensions).toBeDefined();
expect(capabilities?.extensions?.['io.modelcontextprotocol/test-extension']).toEqual({ listChanged: true });
});
test('should advertise client extensions capability to server', async () => {
const mcpServer = new McpServer({
name: 'test server',
version: '1.0'
});
const client = new Client(
{
name: 'test client',
version: '1.0'
},
{
capabilities: {
extensions: {
'io.modelcontextprotocol/test-extension': { streaming: true }
}
}
}
);
const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
await Promise.all([client.connect(clientTransport), mcpServer.connect(serverTransport)]);
const capabilities = mcpServer.server.getClientCapabilities();
expect(capabilities?.extensions).toBeDefined();
expect(capabilities?.extensions?.['io.modelcontextprotocol/test-extension']).toEqual({ streaming: true });
});
});
describe('ResourceTemplate', () => {