Skip to content

Commit bb81ecd

Browse files
committed
fix: review update
1 parent 0d06e88 commit bb81ecd

2 files changed

Lines changed: 41 additions & 10 deletions

File tree

src/__tests__/server.resourceMeta.test.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,29 @@ describe('setMetadataOptions', () => {
8181
expect(content).toContain('# Test Config Metadata');
8282
});
8383

84+
it('should merge values from multiple complete callbacks', async () => {
85+
const completeVersion = jest.fn().mockResolvedValue(['v1']);
86+
const completeCategory = jest.fn().mockResolvedValue(['cat1']);
87+
const options = setMetadataOptions({
88+
name: 'test',
89+
baseUri: 'test://uri',
90+
searchParams: [],
91+
config: { title: 'Test Multiple Callbacks' } as any,
92+
metaConfig: {},
93+
complete: { version: completeVersion, category: completeCategory },
94+
registerAllSearchCombinations: undefined
95+
});
96+
97+
const content = await options.metaHandler({});
98+
99+
expect(completeVersion).toHaveBeenCalledTimes(1);
100+
expect(completeCategory).toHaveBeenCalledTimes(1);
101+
expect(content).toContain('version');
102+
expect(content).toContain('category');
103+
expect(content).toContain('v1');
104+
expect(content).toContain('cat1');
105+
});
106+
84107
it('should fall back to empty values when a complete callback throws', async () => {
85108
const throwingComplete = jest.fn().mockRejectedValue(new Error('network error'));
86109
const options = setMetadataOptions({
@@ -252,6 +275,7 @@ describe('setMetaResources', () => {
252275

253276
expect(callback).toHaveBeenCalledTimes(1);
254277
expect(result.contents).toHaveLength(2);
278+
expect(result.contents[0]).toBe(originalContent.contents[0]);
255279
expect(result.contents[0].text).toBe('original');
256280
expect(result.contents[1].text).toContain('Test Metadata');
257281
});

src/server.resourceMeta.ts

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -401,18 +401,25 @@ const setMetaResources = (resources: McpResourceCreator[], options = getOptions(
401401
runWithOptions(opts, async () => {
402402
const result = await callback(passedUri, variables);
403403

404-
if (result.contents) {
405-
const updatedText = await resolveMetaText(variables);
406-
const queryString = buildSearchString(variables, { prefix: true });
407-
408-
result.contents.push({
409-
uri: queryString ? `${uriBreakdown.metaBaseUri}${queryString}` : uriBreakdown.metaBaseUri,
410-
mimeType: metaMimeType,
411-
text: updatedText
412-
});
404+
if (!isPlainObject(result) || !Array.isArray(result.contents)) {
405+
return result;
413406
}
414407

415-
return result;
408+
const updatedText = await resolveMetaText(variables);
409+
const queryString = buildSearchString(variables, { prefix: true });
410+
const metaContentUri = queryString ? `${uriBreakdown.metaBaseUri}${queryString}` : uriBreakdown.metaBaseUri;
411+
412+
return {
413+
...result,
414+
contents: [
415+
...result.contents,
416+
{
417+
uri: metaContentUri,
418+
mimeType: metaMimeType,
419+
text: updatedText
420+
}
421+
]
422+
};
416423
});
417424

418425
return [name, uriOrTemplate, config, metaEnhancedCallback, metadata];

0 commit comments

Comments
 (0)