get_group_member_statistics
Retrieve team member statistics from Yuque, including edit counts, read counts, like counts, and document contributions, with filtering and sorting options.
Instructions
获取团队成员的统计数据,包括各成员的编辑次数、阅读量、点赞量等
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| login | Yes | 团队的登录名或唯一标识 | |
| name | No | 成员名称,用于过滤特定成员 | |
| range | No | 时间范围(0: 全部, 30: 近30天, 365: 近一年) | |
| page | No | 页码,默认为1 | |
| limit | No | 每页数量,默认为10,最大为20 | |
| sortField | No | 排序字段,可选值:write_doc_count、write_count、read_count、like_count | |
| sortOrder | No | 排序方向,可选值:desc(降序)、asc(升序),默认为desc | |
| accessToken | No | 用于认证 API 请求的令牌 |
Implementation Reference
- src/server.ts:591-620 (handler)The MCP tool handler function that processes the input parameters, creates a YuqueService instance, calls getGroupMemberStatistics, and returns the result as formatted JSON.try { const { login, accessToken, ...queryParams } = params; Logger.log(`Fetching member statistics for group: ${login}`); const yuqueService = this.createYuqueService(accessToken); const stats = await yuqueService.getGroupMemberStatistics( login, queryParams ); Logger.log( `Successfully fetched member statistics for group: ${login}` ); return { content: [{ type: "text", text: JSON.stringify(stats, null, 2) }], }; } catch (error) { Logger.error( `Error fetching member statistics for group ${params.login}:`, error ); return { content: [ { type: "text", text: `Error fetching group member statistics: ${error}`, }, ], }; } }
- src/server.ts:570-589 (schema)Zod schema defining the input parameters for the get_group_member_statistics tool.login: z.string().describe("团队的登录名或唯一标识"), name: z.string().optional().describe("成员名称,用于过滤特定成员"), range: z .number() .optional() .describe("时间范围(0: 全部, 30: 近30天, 365: 近一年)"), page: z.number().optional().describe("页码,默认为1"), limit: z.number().optional().describe("每页数量,默认为10,最大为20"), sortField: z .string() .optional() .describe( "排序字段,可选值:write_doc_count、write_count、read_count、like_count" ), sortOrder: z .enum(["desc", "asc"]) .optional() .describe("排序方向,可选值:desc(降序)、asc(升序),默认为desc"), accessToken: z.string().optional().describe("用于认证 API 请求的令牌"), },
- src/server.ts:566-621 (registration)Registration of the get_group_member_statistics tool on the MCP server, including name, description, schema, and handler.this.server.tool( "get_group_member_statistics", "获取团队成员的统计数据,包括各成员的编辑次数、阅读量、点赞量等", { login: z.string().describe("团队的登录名或唯一标识"), name: z.string().optional().describe("成员名称,用于过滤特定成员"), range: z .number() .optional() .describe("时间范围(0: 全部, 30: 近30天, 365: 近一年)"), page: z.number().optional().describe("页码,默认为1"), limit: z.number().optional().describe("每页数量,默认为10,最大为20"), sortField: z .string() .optional() .describe( "排序字段,可选值:write_doc_count、write_count、read_count、like_count" ), sortOrder: z .enum(["desc", "asc"]) .optional() .describe("排序方向,可选值:desc(降序)、asc(升序),默认为desc"), accessToken: z.string().optional().describe("用于认证 API 请求的令牌"), }, async (params) => { try { const { login, accessToken, ...queryParams } = params; Logger.log(`Fetching member statistics for group: ${login}`); const yuqueService = this.createYuqueService(accessToken); const stats = await yuqueService.getGroupMemberStatistics( login, queryParams ); Logger.log( `Successfully fetched member statistics for group: ${login}` ); return { content: [{ type: "text", text: JSON.stringify(stats, null, 2) }], }; } catch (error) { Logger.error( `Error fetching member statistics for group ${params.login}:`, error ); return { content: [ { type: "text", text: `Error fetching group member statistics: ${error}`, }, ], }; } } );
- src/services/yuque.ts:437-447 (helper)Helper method in YuqueService that makes the actual API request to retrieve group member statistics from Yuque.async getGroupMemberStatistics(login: string, params?: { name?: string; range?: number; page?: number; limit?: number; sortField?: string; sortOrder?: 'desc' | 'asc'; }): Promise<any> { const response = await this.client.get(`/groups/${login}/statistics/members`, { params }); return response.data.data; }