UNPKG

@box3lab/statistics-mcp

Version:

神岛平台数据统计MCP服务,提供用户资料、地图信息和统计数据访问

97 lines (91 loc) 2.83 kB
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { makeApiRequest } from "../utils/api.js"; import { z } from "zod"; /** * 注册公开API工具(不需要认证) * @param server MCP服务器实例 */ export function registerPublicTools(server: McpServer) { /** * 用户资料API */ server.tool( "getUserProfile", "获取神岛平台用户的个人资料数据", { userId: z.string().describe("用户ID"), }, async ({ userId }, extra) => { return await makeApiRequest(`/user/profile/${userId}`); } ); /** * 地图详情API */ server.tool( "getMapInfo", "获取神岛平台用户地图详情", { mapId: z.string().describe("地图ID"), }, async ({ mapId }, extra) => { const endpoint = `/content/detail/${mapId}`; return await makeApiRequest(endpoint); } ); /** * 地图评论列表API */ server.tool( "getMapCommentList", "获取神岛平台用户地图评论列表", { contentId: z.string().describe("地图ID"), limit: z.number().describe("查询数量,最多100条"), offset: z.number().describe("偏移量"), orderBy: z.number().describe("排序方式,1创建时间倒序;4热度(默认)"), contentType: z.number().describe("评论分类,1地图,2模型"), }, async ({ contentId, limit, offset, orderBy, contentType }, extra) => { const endpoint = `/comment/list?contentId=${contentId}&limit=${limit}&offset=${offset}&contentType=${contentType}&orderBy=${orderBy}`; return await makeApiRequest(endpoint); } ); /** * 地图发布信息API */ server.tool( "getMapReleaseInfo", "获取神岛平台用户地图发布信息", { contentId: z.string().describe("地图ID"), limit: z.number().describe("查询数量,最多100条"), offset: z.number().describe("偏移量"), }, async ({ contentId, limit, offset }, extra) => { const endpoint = `/map/release-info/${contentId}?limit=${limit}&offset=${offset}`; return await makeApiRequest(endpoint); } ); /** * 地图列表API */ server.tool( "getMapList", "获取神岛平台用户地图列表", { offset: z.number().describe("偏移量"), limit: z.number().describe("查询数量,最多100条"), keyword: z.string().describe("关键词"), orderBy: z .number() .describe( "排序方式,0:官方推荐:最热,1:最新, 2:当通过keyword查找地图时使用" ), }, async ({ offset, limit, keyword, orderBy }, extra) => { const endpoint = `/map/tab/maps?offset=${offset}&limit=${limit}&keyword=${keyword}&orderBy=${orderBy}`; return await makeApiRequest(endpoint); } ); }