|
| 1 | +import { McpServer, ResourceMetadata, ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";; |
| 2 | +import { RequestHandlerExtra } from "@modelcontextprotocol/sdk/shared/protocol.js";; |
| 3 | +import { State } from "../state.js"; |
| 4 | +import { ApiClient } from "../client.js"; |
| 5 | +import { ReadResourceResult } from "@modelcontextprotocol/sdk/types.js";; |
| 6 | +import { Variables } from "@modelcontextprotocol/sdk/shared/uriTemplate.js";; |
| 7 | + |
| 8 | +abstract class ResourceCommonBase { |
| 9 | + protected abstract name: string; |
| 10 | + protected abstract metadata?: ResourceMetadata; |
| 11 | + |
| 12 | + constructor(protected state: State, protected apiClient: ApiClient) { } |
| 13 | +} |
| 14 | + |
| 15 | +export abstract class ResourceUriBase extends ResourceCommonBase { |
| 16 | + protected abstract uri: string; |
| 17 | + |
| 18 | + abstract execute(uri: URL, extra: RequestHandlerExtra): ReadResourceResult | Promise<ReadResourceResult>; |
| 19 | + |
| 20 | + register(server: McpServer) { |
| 21 | + server.resource( |
| 22 | + this.name, |
| 23 | + this.uri, |
| 24 | + this.metadata || {}, |
| 25 | + (uri: URL, extra: RequestHandlerExtra) => { |
| 26 | + return this.execute(uri, extra); |
| 27 | + } |
| 28 | + ); |
| 29 | + } |
| 30 | +} |
| 31 | + |
| 32 | +export abstract class ResourceTemplateBase extends ResourceCommonBase { |
| 33 | + protected abstract template: ResourceTemplate; |
| 34 | + |
| 35 | + abstract execute(uri: URL, variables: Variables, extra: RequestHandlerExtra): ReadResourceResult | Promise<ReadResourceResult>; |
| 36 | + |
| 37 | + register(server: McpServer) { |
| 38 | + server.resource( |
| 39 | + this.name, |
| 40 | + this.template, |
| 41 | + this.metadata || {}, |
| 42 | + (uri: URL, variables: Variables, extra: RequestHandlerExtra) => { |
| 43 | + return this.execute(uri, variables, extra); |
| 44 | + } |
| 45 | + ); |
| 46 | + } |
| 47 | +} |
| 48 | + |
| 49 | +export type ResourceBase = ResourceTemplateBase | ResourceUriBase; |
0 commit comments