UNPKG

@umengfe/mcp-server-umeng-openapi

Version:

MCP server for using the Umeng OpenAPI

98 lines (97 loc) 3.17 kB
#!/usr/bin/env node import { Server } from "@modelcontextprotocol/sdk/server/index.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { CallToolRequestSchema, ListToolsRequestSchema, ListPromptsRequestSchema, GetPromptRequestSchema, } from "@modelcontextprotocol/sdk/types.js"; import fetch from "node-fetch"; import UmengOpenAPI from "./umopenapi.js"; import { UMENG_OPENAPI_TOOLS } from './tools.js'; import { getPrompt, UM_PROMPTS } from "./prompts.js"; // Response interfaces // API handlers async function handleUmengOpenAPI(url, params) { const apiKey = process.env.UMENG_API_KEY; const apiSecret = process.env.UMENG_API_SECRET; if (!apiKey || !apiSecret) { throw new Error('UMENG_API_KEY and UMENG_API_SECRET must be set'); } const umeng = new UmengOpenAPI(apiKey, apiSecret); const signedUrl = umeng.generateSignedUrl(url, params); const response = await fetch(signedUrl); const data = await response.json(); if (!data) { return { content: [{ type: "text", text: `umeng openapi result is null` }], isError: true }; } return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }], isError: false }; } // Server setup const server = new Server({ name: "mcp-server-umeng-openapi", version: "1.0.6", }, { capabilities: { tools: {}, prompts: {}, }, }); // Set up request handlers server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: UMENG_OPENAPI_TOOLS, })); server.setRequestHandler(CallToolRequestSchema, async (request) => { try { if (request.params.name.indexOf("com.umeng") > -1) { const params = request.params.arguments; return await handleUmengOpenAPI(`param2/1/${request.params.name}`, params); } switch (request.params.name) { default: return { content: [{ type: "text", text: `Unknown tool: ${request.params.name}` }], isError: true }; } } catch (error) { return { content: [{ type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` }], isError: true }; } }); server.setRequestHandler(ListPromptsRequestSchema, async () => ({ prompts: UM_PROMPTS, })); server.setRequestHandler(GetPromptRequestSchema, async (request) => { const prompt = await getPrompt(request); return { description: prompt?.description, messages: prompt?.messages, }; }); async function runServer() { const transport = new StdioServerTransport(); await server.connect(transport); console.error("Umeng OpenAPI MCP Server running on stdio"); } runServer().catch((error) => { console.error("Fatal error running server:", error); process.exit(1); });