Skip to main content
Glama

Model Context Protocol Server

resources.ts4.68 kB
/* * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. */ import { McpServer, ResourceMetadata, ResourceTemplate, } from "@modelcontextprotocol/sdk/server/mcp.js"; import { RequestHandlerExtra } from "@modelcontextprotocol/sdk/shared/protocol.js"; import { Variables } from "@modelcontextprotocol/sdk/shared/uriTemplate.js"; import { ReadResourceResult, ServerNotification, ServerRequest, } from "@modelcontextprotocol/sdk/types.js"; import { SDKCore } from "../core.js"; import { ConsoleLogger } from "./console-logger.js"; import { MCPScope } from "./scopes.js"; import { isAsyncIterable, isBinaryData, valueToBase64 } from "./shared.js"; export type ReadResourceCallback = ( client: SDKCore, uri: URL, extra: RequestHandlerExtra<ServerRequest, ServerNotification>, ) => ReadResourceResult | Promise<ReadResourceResult>; export type ResourceDefinition = { name: string; description?: string; metadata?: ResourceMetadata; scopes?: MCPScope[]; resource: string; read: ReadResourceCallback; }; export type ReadResourceTemplateCallback = ( client: SDKCore, uri: URL, vars: Variables, extra: RequestHandlerExtra<ServerRequest, ServerNotification>, ) => ReadResourceResult | Promise<ReadResourceResult>; export type ResourceTemplateDefinition = { name: string; description: string; metadata?: ResourceMetadata; scopes?: MCPScope[]; resource: ResourceTemplate; read: ReadResourceTemplateCallback; }; // Optional function to assist with formatting resource results export async function formatResult( value: unknown, uri: URL, init: { mimeType?: string | undefined; response?: Response | undefined }, ): Promise<ReadResourceResult> { if (typeof value === "undefined") { return { contents: [] }; } let contents: ReadResourceResult["contents"] = []; const mimeType = init.mimeType ?? init.response?.headers.get("content-type") ?? ""; if (mimeType.search(/\bjson\b/g) !== -1) { contents = [{ uri: uri.toString(), mimeType, text: JSON.stringify(value) }]; } else if ( mimeType.startsWith("text/event-stream") && isAsyncIterable(value) ) { contents = [ { uri: uri.toString(), mimeType: "application/json", text: await stringifySSEToJSON(value), }, ]; } else if ( (mimeType.startsWith("text/") || mimeType.startsWith("application/")) && typeof value === "string" ) { contents = [{ uri: uri.toString(), mimeType, text: value }]; } else if (isBinaryData(value)) { const blob = await valueToBase64(value); contents = blob == null ? [] : [{ uri: uri.toString(), blob, mimeType }]; } else { throw new Error(`Unsupported content type: "${mimeType}"`); } return { contents }; } async function stringifySSEToJSON( value: AsyncIterable<unknown>, ): Promise<string> { const payloads = []; for await (const chunk of value) { payloads.push(chunk); } return JSON.stringify(payloads); } export function createRegisterResource( logger: ConsoleLogger, server: McpServer, getSDK: () => SDKCore, allowedScopes: Set<MCPScope>, ): (resource: ResourceDefinition) => void { return (resource: ResourceDefinition): void => { const scopes = resource.scopes ?? []; if (allowedScopes.size > 0 && scopes.length === 0) { return; } if ( allowedScopes.size > 0 && !scopes.every((s: MCPScope) => allowedScopes.has(s)) ) { return; } const metadata: ResourceMetadata = { ...resource.metadata, description: resource.description, }; server.resource( resource.name, resource.resource, metadata, async (uri, ctx) => resource.read(getSDK(), uri, ctx), ); logger.debug("Registered resource", { name: resource.name }); }; } export function createRegisterResourceTemplate( logger: ConsoleLogger, server: McpServer, getSDK: () => SDKCore, allowedScopes: Set<MCPScope>, ): (resource: ResourceTemplateDefinition) => void { return (resource: ResourceTemplateDefinition): void => { const scopes = resource.scopes ?? []; if (allowedScopes.size > 0 && scopes.length === 0) { return; } if ( allowedScopes.size > 0 && !scopes.every((s: MCPScope) => allowedScopes.has(s)) ) { return; } const metadata: ResourceMetadata = { ...resource.metadata, description: resource.description, }; server.resource( resource.name, resource.resource, metadata, async (uri, vars, ctx) => resource.read(getSDK(), uri, vars, ctx), ); logger.debug("Registered resource template", { name: resource.name }); }; }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kanwardeep007/random-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server