@yogeliu/mcp-server-yapi
Version:
Enhanced YAPI MCP server with multi-project support and enterprise features
86 lines • 2.69 kB
JavaScript
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