yapi-mcp-server
Version:
YApi MCP Server
77 lines (73 loc) • 2.39 kB
text/typescript
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { getApisDesc, checkConf } from "./yapi.js";
import z from "zod";
const conf = checkConf();
// Create an MCP server
const server = new McpServer({
name: "YApi MCP Server",
version: "1.0.0",
});
// 获取API接口详情
server.tool(
"yapi_get_apis_detail",
"获取YApi接口详情,支持同时获取多个",
{
apiIds: z
.array(z.string().or(z.number()))
.describe(
"YApi接口的ID数组;如链接/project/1/interface/api/66,则ID为66"
),
},
async ({ apiIds }: { apiIds: (string | number)[] }) => {
try {
const apisDesc = await getApisDesc(apiIds, conf);
// 格式化返回数据,使其更易于阅读
return {
content: [
{
type: "text",
text: JSON.stringify(
apisDesc.map((item) => ({
基本信息: {
接口ID: item._id,
接口名称: item.title,
接口路径: item.path,
请求方式: item.method,
接口描述: item.desc,
},
请求参数: {
URL参数: item.req_params,
查询参数: item.req_query,
请求头: item.req_headers,
请求体类型: item.req_body_type,
表单参数: item.req_body_form,
请求体: item.req_body_other,
},
响应信息: {
响应类型: item.res_body_type,
响应内容: item.res_body,
},
其他信息: {
接口文档: item.markdown,
},
})),
null,
2
),
},
],
};
} catch (error) {
const errMsg = error instanceof Error ? error.message : String(error);
console.error("获取API接口出错:", errMsg, error);
return {
content: [{ type: "text", text: `获取API接口出错: ${errMsg}` }],
};
}
}
);
// Start receiving messages on stdin and sending messages on stdout
const transport = new StdioServerTransport();
await server.connect(transport);