@box3lab/statistics-mcp
Version:
神岛平台数据统计MCP服务,提供用户资料、地图信息和统计数据访问
78 lines (77 loc) • 2.85 kB
JavaScript
import { makeApiRequest, createAuthHeaders } from "../utils/api.js";
import { z } from "zod";
/**
* 通用认证参数
*/
const authParams = {
token: z.string().describe("认证Token"),
userAgent: z.string().describe("用户请求头"),
};
/**
* 统计相关工具的通用参数
*/
const statsParams = {
startTime: z.string().describe("开始时间,例如:2025-03-29"),
endTime: z.string().describe("结束时间,例如:2025-04-04"),
...authParams,
};
/**
* 带地图ID的统计工具参数
*/
const mapStatsParams = {
...statsParams,
mapId: z.string().describe("地图ID"),
};
/**
* 地图统计工具列表
*/
const mapStatsEndpoints = [
{
name: "getMapPlayerStatList",
description: "获取神岛平台用户地图玩家统计,需Token和用户请求头和地图ID",
path: "/statistics/map/player",
},
{
name: "getMapPlayerRetention",
description: "获取神岛平台用户地图玩家留存,需Token和用户请求头和地图ID",
path: "/statistics/map/player-retention",
},
{
name: "getMapPlayerBehavior",
description: "获取神岛平台用户地图玩家行为,需Token和用户请求头和地图ID",
path: "/statistics/map/player-behavior",
},
];
/**
* 注册需要认证的API工具
* @param server MCP服务器实例
*/
export function registerAuthTools(server) {
/**
* 获取评论列表
*/
server.tool("getCommentList", "获取神岛平台用户的评论列表,需要Token和用户请求头", {
offset: z.number().describe("偏移量"),
limit: z.number().describe("限制数量"),
...authParams,
}, async ({ offset, limit, token, userAgent }, extra) => {
const headers = createAuthHeaders(token, userAgent);
return await makeApiRequest(`/msg/comment?offset=${offset}&limit=${limit}`, headers);
});
/**
* 获取地图统计列表
*/
server.tool("getMapStatList", "获取神岛平台用户地图统计列表,需Token和用户请求头", statsParams, async ({ startTime, endTime, token, userAgent }, extra) => {
const endpoint = `/statistics/map/user-maps?startTime=${startTime}&endTime=${endTime}`;
const headers = createAuthHeaders(token, userAgent);
return await makeApiRequest(endpoint, headers);
});
// 批量注册地图统计工具
mapStatsEndpoints.forEach(({ name, description, path }) => {
server.tool(name, description, mapStatsParams, async ({ startTime, endTime, token, userAgent, mapId }, extra) => {
const endpoint = `${path}?startTime=${startTime}&endTime=${endTime}&mapId=${mapId}`;
const headers = createAuthHeaders(token, userAgent);
return await makeApiRequest(endpoint, headers);
});
});
}