UNPKG

@boldsign/mcp

Version:

Model Context Protocol (MCP) server for BoldSign API

49 lines (48 loc) 2.16 kB
#!/usr/bin/env node import { Server } from '@modelcontextprotocol/sdk/server/index.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; import { CallToolRequestSchema, ErrorCode, ListToolsRequestSchema, McpError, } from '@modelcontextprotocol/sdk/types.js'; import { definitions } from './tools/index.js'; import { toJsonString, zodToJsonSchema } from './utils/utils.js'; export const server = new Server({ name: 'boldsign-mcp', version: '0.0.4' }, { capabilities: { tools: {}, resources: {}, prompts: {}, completions: {}, logging: {} } }); server.onerror = (error) => console.error('[Error]', error); server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: definitions.map((toolDefinition) => { return { name: toolDefinition.method, description: toolDefinition.description, inputSchema: zodToJsonSchema(toolDefinition.inputSchema), }; }), })); server.setRequestHandler(CallToolRequestSchema, async (request) => { const toolName = request.params.name; const tool = definitions.find((t) => t.method === toolName); if (!tool) { throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${toolName}`); } const args = request.params.arguments; const schemaResult = tool.inputSchema.safeParse(args); if (!schemaResult.success) { throw new McpError(ErrorCode.InvalidParams, `Invalid parameters for tool ${toolName}: ${schemaResult.error.message}`); } try { const result = await tool.handler(args); return { content: [{ type: 'text', text: `${toJsonString(result)}` }], }; } catch (error) { console.error('[Error] Failed to fetch data:', error); const errorMessage = error instanceof Error ? error.message : String(error); throw new McpError(ErrorCode.InternalError, `API error: ${errorMessage}`); } }); async function runServer() { const transport = new StdioServerTransport(); await server.connect(transport); } runServer().catch((error) => { console.error('Fatal error running server:', error); process.exit(1); });