@umengfe/mcp-server-umeng-openapi
Version:
MCP server for using the Umeng OpenAPI
98 lines (97 loc) • 3.17 kB
JavaScript
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);
});