Add _meta support to registerPrompt (#1629)

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Felix Weinberger <3823880+felixweinberger@users.noreply.github.com>
This commit is contained in:
Tapan Chugh 2026-03-31 03:56:30 -07:00 • committed by GitHub
commit f73a5af4bc
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -4253,6 +4253,99 @@ describe('Zod v4', () => {
}
]);
});
/***
* Test: Prompt Registration with _meta field
*/
test('should register prompt with _meta field and include it in list response', async () => {
const mcpServer = new McpServer({
name: 'test server',
version: '1.0'
});
const client = new Client({
name: 'test client',
version: '1.0'
});
const metaData = {
author: 'test-author',
version: '1.2.3',
category: 'utility',
tags: ['test', 'example']
};
mcpServer.registerPrompt(
'test-with-meta',
{
description: 'A prompt with _meta field',
_meta: metaData
},
async () => ({
messages: [
{
role: 'assistant',
content: {
type: 'text',
text: 'Test response'
}
}
]
})
);
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).toHaveLength(1);
expect(result.prompts[0]!.name).toBe('test-with-meta');
expect(result.prompts[0]!.description).toBe('A prompt with _meta field');
expect(result.prompts[0]!._meta).toEqual(metaData);
});
/***
* Test: Prompt Registration without _meta field should have undefined _meta
*/
test('should register prompt without _meta field and have undefined _meta in response', async () => {
const mcpServer = new McpServer({
name: 'test server',
version: '1.0'
});
const client = new Client({
name: 'test client',
version: '1.0'
});
mcpServer.registerPrompt(
'test-without-meta',
{
description: 'A prompt without _meta field'
},
async () => ({
messages: [
{
role: 'assistant',
content: {
type: 'text',
text: 'Test response'
}
}
]
})
);
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).toHaveLength(1);
expect(result.prompts[0]!.name).toBe('test-without-meta');
expect(result.prompts[0]!._meta).toBeUndefined();
});
});
describe('Tool title precedence', () => {