UNPKG

@yogeliu/mcp-server-yapi

Version:

Enhanced YAPI MCP server with multi-project support and enterprise features

86 lines 2.69 kB
import fetch from "node-fetch"; import { logger } from "mcp-framework"; import { getProjectConfig } from "../config.js"; /** * 通用请求头 */ const COMMON_HEADERS = { Accept: "application/json, text/plain, */*", "Accept-Encoding": "gzip, deflate, br", "User-Agent": "YAPI-MCP-Client/1.0.0", }; /** * 通用请求处理函数 * @param url 请求URL * @param options fetch选项 * @returns Promise<YapiResponse<T>> */ async function yapiRequest(url, options) { try { logger.debug(`[YAPI] 请求URL: ${url}`); const response = await fetch(url, { ...options, headers: { ...COMMON_HEADERS, ...options.headers, }, }); if (!response.ok) { logger.error(`[YAPI] 响应错误: [${response.status}] ${await response.text()}`); throw new Error(`HTTP错误! status: ${response.status} ${response.statusText}`); } const data = (await response.json()); logger.debug(`[YAPI] 响应: ${JSON.stringify(data)}`); return data; } catch (error) { logger.error(`[YAPI] 请求失败: ${error}`); throw error; } } /** * 发送GET请求到YAPI * @param path API路径 * @param params 查询参数 * @returns Promise<YapiResponse<T>> 响应数据 */ export async function yapiGet(path, params = {}, projectName) { const config = getProjectConfig(projectName); // 添加token到查询参数 const requestParams = { token: config.token, ...params, }; // 过滤掉值为undefined的参数 const filteredParams = Object.fromEntries(Object.entries(requestParams).filter(([_, value]) => value !== undefined)); // 构建URL const url = new URL(`${config.baseUrl}${path}`); Object.keys(filteredParams).forEach((key) => url.searchParams.append(key, String(filteredParams[key]))); return yapiRequest(url.toString(), { method: "GET", }); } /** * 发送POST请求到YAPI * @param path API路径 * @param data 请求体数据 * @returns Promise<YapiResponse<T>> 响应数据 */ export async function yapiPost(path, data = {}, projectName) { const config = getProjectConfig(projectName); // 添加token到请求数据 const requestData = { token: config.token, ...data, }; const url = `${config.baseUrl}${path}`; logger.debug(`[YAPI] 请求数据: ${JSON.stringify(requestData)}`); return yapiRequest(url, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify(requestData), }); } //# sourceMappingURL=yapi-request.js.map