MCPcopy Create free account
hub / github.com/modelcontextprotocol/typescript-sdk / setResourceRequestHandlers

Method setResourceRequestHandlers

src/server/mcp.ts:485–562  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

483 private _resourceHandlersInitialized = false;
484
485 private setResourceRequestHandlers() {
486 if (this._resourceHandlersInitialized) {
487 return;
488 }
489
490 this.server.assertCanSetRequestHandler(getMethodValue(ListResourcesRequestSchema));
491 this.server.assertCanSetRequestHandler(getMethodValue(ListResourceTemplatesRequestSchema));
492 this.server.assertCanSetRequestHandler(getMethodValue(ReadResourceRequestSchema));
493
494 this.server.registerCapabilities({
495 resources: {
496 listChanged: true
497 }
498 });
499
500 this.server.setRequestHandler(ListResourcesRequestSchema, async (request, extra) => {
501 const resources = Object.entries(this._registeredResources)
502 .filter(([_, resource]) => resource.enabled)
503 .map(([uri, resource]) => ({
504 uri,
505 name: resource.name,
506 ...resource.metadata
507 }));
508
509 const templateResources: Resource[] = [];
510 for (const template of Object.values(this._registeredResourceTemplates)) {
511 if (!template.resourceTemplate.listCallback) {
512 continue;
513 }
514
515 const result = await template.resourceTemplate.listCallback(extra);
516 for (const resource of result.resources) {
517 templateResources.push({
518 ...template.metadata,
519 // the defined resource metadata should override the template metadata if present
520 ...resource
521 });
522 }
523 }
524
525 return { resources: [...resources, ...templateResources] };
526 });
527
528 this.server.setRequestHandler(ListResourceTemplatesRequestSchema, async () => {
529 const resourceTemplates = Object.entries(this._registeredResourceTemplates).map(([name, template]) => ({
530 name,
531 uriTemplate: template.resourceTemplate.uriTemplate.toString(),
532 ...template.metadata
533 }));
534
535 return { resourceTemplates };
536 });
537
538 this.server.setRequestHandler(ReadResourceRequestSchema, async (request, extra) => {
539 const uri = new URL(request.params.uri);
540
541 // First check for exact resource match
542 const resource = this._registeredResources[uri.toString()];

Callers 2

resourceMethod · 0.95
registerResourceMethod · 0.95

Calls 6

getMethodValueFunction · 0.85
listCallbackMethod · 0.80
toStringMethod · 0.80
matchMethod · 0.80
registerCapabilitiesMethod · 0.45
setRequestHandlerMethod · 0.45

Tested by

no test coverage detected