UNPKG

@access-mcp/shared

Version:

Shared utilities for ACCESS-CI MCP servers

102 lines (101 loc) 3.76 kB
import { Server } from "@modelcontextprotocol/sdk/server/index.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { Tool, Resource, Prompt, CallToolResult, ReadResourceResult, GetPromptResult, CallToolRequest, ReadResourceRequest, GetPromptRequest } from "@modelcontextprotocol/sdk/types.js"; import { AxiosInstance } from "axios"; import { Logger } from "./logger.js"; export type { Tool, Resource, Prompt, CallToolResult, ReadResourceResult, GetPromptResult }; export declare abstract class BaseAccessServer { protected serverName: string; protected version: string; protected baseURL: string; protected server: Server; protected transport: StdioServerTransport; protected logger: Logger; private _httpClient?; private _httpServer?; private _httpPort?; private _sseTransports; constructor(serverName: string, version: string, baseURL?: string); protected get httpClient(): AxiosInstance; private setupHandlers; protected abstract getTools(): Tool[]; protected abstract getResources(): Resource[]; protected abstract handleToolCall(request: CallToolRequest): Promise<CallToolResult>; /** * Get available prompts - override in subclasses to provide prompts */ protected getPrompts(): Prompt[]; /** * Handle resource read requests - override in subclasses */ protected handleResourceRead(request: ReadResourceRequest): Promise<ReadResourceResult>; /** * Handle get prompt requests - override in subclasses */ protected handleGetPrompt(request: GetPromptRequest): Promise<GetPromptResult>; /** * Helper method to create a standard error response (MCP 2025 compliant) * @param message The error message * @param hint Optional suggestion for how to fix the error */ protected errorResponse(message: string, hint?: string): CallToolResult; /** * Helper method to create a JSON resource response * @param uri The resource URI * @param data The data to return as JSON */ protected createJsonResource(uri: string, data: unknown): { contents: { uri: string; mimeType: string; text: string; }[]; }; /** * Helper method to create a Markdown resource response * @param uri The resource URI * @param markdown The markdown content */ protected createMarkdownResource(uri: string, markdown: string): { contents: { uri: string; mimeType: string; text: string; }[]; }; /** * Helper method to create a text resource response * @param uri The resource URI * @param text The plain text content */ protected createTextResource(uri: string, text: string): { contents: { uri: string; mimeType: string; text: string; }[]; }; /** * Start the MCP server with optional HTTP service layer for inter-server communication */ start(options?: { httpPort?: number; }): Promise<void>; /** * Start HTTP service layer with SSE support for remote MCP connections */ private startHttpService; /** * Set up MCP handlers on a server instance */ private setupServerHandlers; /** * Call a tool on another ACCESS-CI MCP server via HTTP */ protected callRemoteServer(serviceName: string, toolName: string, args?: Record<string, unknown>): Promise<unknown>; /** * Get service endpoint from environment configuration * Expected format: ACCESS_MCP_SERVICES=nsf-awards=http://localhost:3001,xdmod-metrics=http://localhost:3002 */ private getServiceEndpoint; }