@access-mcp/shared
Version:
Shared utilities for ACCESS-CI MCP servers
102 lines (101 loc) • 3.76 kB
TypeScript
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;
}