mcp-user-system 1.0.5 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,83 @@
1
+ import { apiGet, apiGetPage } from "./client.js";
2
+ export const tools = [
3
+ {
4
+ name: "tokens_list",
5
+ description: "获取全部API密钥列表(带权限校验)",
6
+ inputSchema: {
7
+ type: "object",
8
+ properties: {
9
+ status: { type: "string", description: "密钥状态" },
10
+ name: { type: "string", description: "密钥名称" },
11
+ },
12
+ required: [],
13
+ },
14
+ },
15
+ {
16
+ name: "tokens_list_page",
17
+ description: "分页获取API密钥列表",
18
+ inputSchema: {
19
+ type: "object",
20
+ properties: {
21
+ status: { type: "string", description: "密钥状态" },
22
+ name: { type: "string", description: "密钥名称" },
23
+ pageNum: { type: "string", description: "页码" },
24
+ pageSize: { type: "string", description: "每页条数" },
25
+ },
26
+ required: [],
27
+ },
28
+ },
29
+ {
30
+ name: "tokens_stats",
31
+ description: "密钥统计概览",
32
+ inputSchema: { type: "object", properties: {}, required: [] },
33
+ },
34
+ {
35
+ name: "tokens_configurable_models",
36
+ description: "获取可配置AI模型列表(含定价与功能)",
37
+ inputSchema: {
38
+ type: "object",
39
+ properties: {
40
+ deptId: { type: "string", description: "部门ID(可选)" },
41
+ ruleMonth: { type: "string", description: "规则月份(可选)" },
42
+ },
43
+ required: [],
44
+ },
45
+ },
46
+ {
47
+ name: "tag_list",
48
+ description: "获取所有启用的标签列表",
49
+ inputSchema: { type: "object", properties: {}, required: [] },
50
+ },
51
+ {
52
+ name: "tag_detail",
53
+ description: "获取标签详情",
54
+ inputSchema: {
55
+ type: "object",
56
+ properties: {
57
+ id: { type: "string", description: "标签ID" },
58
+ },
59
+ required: ["id"],
60
+ },
61
+ },
62
+ ];
63
+ export async function handle(name, args) {
64
+ switch (name) {
65
+ case "tokens_list":
66
+ return apiGet("/console/tokens/list", { status: args.status, name: args.name });
67
+ case "tokens_list_page":
68
+ return apiGetPage("/console/tokens/listPage", {
69
+ status: args.status, name: args.name, pageNum: args.pageNum, pageSize: args.pageSize,
70
+ });
71
+ case "tokens_stats":
72
+ return apiGet("/console/tokens/stats");
73
+ case "tokens_configurable_models":
74
+ return apiGet("/console/tokens/configurable-models", { deptId: args.deptId, ruleMonth: args.ruleMonth });
75
+ case "tag_list":
76
+ return apiGet("/console/tag/list");
77
+ case "tag_detail":
78
+ return apiGet(`/console/tag/${args.id}`);
79
+ default:
80
+ throw new Error(`Unknown tool: ${name}`);
81
+ }
82
+ }
83
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/tools/tokens.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export declare const tools: ({
2
+ name: string;
3
+ description: string;
4
+ inputSchema: {
5
+ type: "object";
6
+ properties: {
7
+ deptId?: undefined;
8
+ };
9
+ required: never[];
10
+ };
11
+ } | {
12
+ name: string;
13
+ description: string;
14
+ inputSchema: {
15
+ type: "object";
16
+ properties: {
17
+ deptId: {
18
+ type: string;
19
+ description: string;
20
+ };
21
+ };
22
+ required: string[];
23
+ };
24
+ })[];
25
+ export declare function handle(name: string, args: Record<string, string>): Promise<unknown>;
@@ -0,0 +1,60 @@
1
+ import { apiGet } from "./client.js";
2
+ // ---- 工具定义 ----
3
+ export const tools = [
4
+ {
5
+ name: "get_user_info",
6
+ description: "获取当前登录用户信息(含角色、权限)",
7
+ inputSchema: { type: "object", properties: {}, required: [] },
8
+ },
9
+ {
10
+ name: "get_user_profile",
11
+ description: "获取个人资料详情",
12
+ inputSchema: { type: "object", properties: {}, required: [] },
13
+ },
14
+ {
15
+ name: "get_user_role_list",
16
+ description: "获取用户角色列表",
17
+ inputSchema: { type: "object", properties: {}, required: [] },
18
+ },
19
+ {
20
+ name: "get_user_workbench",
21
+ description: "获取工作台列表(可切换的团队/部门)",
22
+ inputSchema: { type: "object", properties: {}, required: [] },
23
+ },
24
+ {
25
+ name: "get_user_auth_info",
26
+ description: "获取用户实名认证信息",
27
+ inputSchema: { type: "object", properties: {}, required: [] },
28
+ },
29
+ {
30
+ name: "switch_workbench",
31
+ description: "切换工作台(切换当前操作的团队/部门视图)",
32
+ inputSchema: {
33
+ type: "object",
34
+ properties: {
35
+ deptId: { type: "string", description: "目标部门ID" },
36
+ },
37
+ required: ["deptId"],
38
+ },
39
+ },
40
+ ];
41
+ // ---- 处理函数 ----
42
+ export async function handle(name, args) {
43
+ switch (name) {
44
+ case "get_user_info":
45
+ return apiGet("/getInfo");
46
+ case "get_user_profile":
47
+ return apiGet("/system/user/profile");
48
+ case "get_user_role_list":
49
+ return apiGet("/console/user/roleList");
50
+ case "get_user_workbench":
51
+ return apiGet("/console/user/workbench");
52
+ case "get_user_auth_info":
53
+ return apiGet("/console/user/authInfo");
54
+ case "switch_workbench":
55
+ return apiGet(`/console/user/workbench/${args.deptId}/switch`);
56
+ default:
57
+ throw new Error(`Unknown tool: ${name}`);
58
+ }
59
+ }
60
+ //# sourceMappingURL=user.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/tools/user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,iBAAiB;AACjB,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,oBAAoB;QACjC,WAAW,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;KACvE;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,UAAU;QACvB,WAAW,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;KACvE;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,UAAU;QACvB,WAAW,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;KACvE;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,oBAAoB;QACjC,WAAW,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;KACvE;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,YAAY;QACzB,WAAW,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;KACvE;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,uBAAuB;QACpC,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE;aAClD;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB;KACF;CACF,CAAC;AAEF,iBAAiB;AACjB,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAY,EAAE,IAA4B;IACrE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,eAAe;YAClB,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC;QAC5B,KAAK,kBAAkB;YACrB,OAAO,MAAM,CAAC,sBAAsB,CAAC,CAAC;QACxC,KAAK,oBAAoB;YACvB,OAAO,MAAM,CAAC,wBAAwB,CAAC,CAAC;QAC1C,KAAK,oBAAoB;YACvB,OAAO,MAAM,CAAC,yBAAyB,CAAC,CAAC;QAC3C,KAAK,oBAAoB;YACvB,OAAO,MAAM,CAAC,wBAAwB,CAAC,CAAC;QAC1C,KAAK,kBAAkB;YACrB,OAAO,MAAM,CAAC,2BAA2B,IAAI,CAAC,MAAM,SAAS,CAAC,CAAC;QACjE;YACE,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC"}
@@ -1,204 +1,119 @@
1
- /**
2
- * OpenAPI client for token-user-system.
3
- * Calls backend-openapi endpoints under /openapi/*.
4
- */
5
- export interface WalletOverviewVo {
6
- balance?: number;
7
- usableBalance?: number;
8
- voucher?: number;
9
- creditLimit?: number;
10
- pendingAmount?: number;
11
- pendingCount?: number;
12
- }
13
- export declare function getWalletOverview(): Promise<WalletOverviewVo>;
14
- export interface DashboardStatsVo {
15
- usedQuotaTotal?: number;
16
- lastMonthUsed?: number;
17
- monthComparePercent?: number;
18
- usedAmount?: number;
19
- usedTokens?: number;
20
- requestCount?: number;
21
- activeUsers?: number;
22
- showCompare?: boolean;
23
- amountComparePercent?: number;
24
- tokenComparePercent?: number;
25
- requestComparePercent?: number;
26
- activeUserCompare?: number;
27
- }
28
- export declare function getDashboardStats(params?: {
29
- timeRange?: string;
30
- startDate?: string;
31
- endDate?: string;
32
- }): Promise<DashboardStatsVo>;
33
- export interface OrderDetailVo {
34
- createTime?: string;
35
- createdAt?: number;
36
- userId?: number;
37
- userName?: string;
38
- teamNickname?: string;
39
- deptId?: number;
40
- deptName?: string;
41
- tokenId?: number;
42
- tokenName?: string;
43
- modelName?: string;
44
- useTime?: number;
45
- status?: number;
46
- amount?: number;
47
- statusText?: string;
48
- type?: string;
49
- }
50
- export interface TableDataInfo<T> {
51
- total: number;
52
- rows: T[];
53
- code: number;
54
- msg: string;
55
- }
56
- export declare function getDashboardOrders(params?: {
57
- timeRange?: string;
58
- startDate?: string;
59
- endDate?: string;
60
- type?: string;
61
- keyword?: string;
62
- }): Promise<TableDataInfo<OrderDetailVo>>;
63
- export interface DashboardUserOptionVo {
64
- userId?: number;
65
- userName?: string;
66
- nickName?: string;
67
- }
68
- export declare function getDashboardUsers(deptId?: string): Promise<DashboardUserOptionVo[]>;
69
- export interface DashboardModelStatVo {
70
- modelName?: string;
71
- callCount?: number;
72
- callPercent?: number;
73
- tokens?: number;
74
- tokenPercent?: number;
75
- amount?: number;
76
- avgAmount?: number;
77
- amountPercent?: number;
78
- }
79
- export declare function getDashboardModelStats(params?: {
80
- timeRange?: string;
81
- startDate?: string;
82
- endDate?: string;
83
- sortBy?: string;
84
- }): Promise<DashboardModelStatVo[]>;
85
- export interface DashboardTrendVo {
86
- date?: string;
87
- amount?: number;
88
- tokens?: number;
89
- }
90
- export declare function getDashboardTrend(params?: {
91
- timeRange?: string;
92
- startDate?: string;
93
- endDate?: string;
94
- }): Promise<DashboardTrendVo[]>;
95
- export interface ModelOptionVo {
96
- modelCode?: string;
97
- modelName?: string;
98
- modelType?: string;
99
- unitPrice?: number;
100
- selected?: boolean;
101
- features?: string[];
102
- icon?: string;
103
- customerDiscountRate?: number;
104
- saleReferenceDiscount?: number;
105
- hot?: boolean;
106
- }
107
- export declare function getConfigurableModels(params?: {
108
- deptId?: string;
109
- ruleMonth?: string;
110
- }): Promise<ModelOptionVo[]>;
111
- export interface TokensListVo {
112
- id?: number;
113
- groupId?: number;
114
- deptId?: number;
115
- userId?: number;
116
- apiKey?: string;
117
- status?: number;
118
- name?: string;
119
- accessedTime?: number;
120
- expiredTime?: number;
121
- remainQuota?: number;
122
- unlimitedQuota?: boolean;
123
- modelLimitsEnabled?: boolean;
124
- modelLimits?: string;
125
- allowIps?: string;
126
- usedQuota?: number;
127
- group?: string;
128
- crossGroupRetry?: boolean;
129
- tags?: string;
130
- createTime?: string;
131
- baseUrl?: string;
132
- queryType?: number;
133
- }
134
- export declare function getTokensList(params?: {
135
- id?: string;
136
- groupId?: string;
137
- deptId?: string;
138
- userId?: string;
139
- status?: string;
140
- name?: string;
141
- }): Promise<TokensListVo[]>;
142
- export declare function getTokensListPage(params?: {
143
- id?: string;
144
- groupId?: string;
145
- deptId?: string;
146
- userId?: string;
147
- status?: string;
148
- name?: string;
149
- pageNum?: string;
150
- pageSize?: string;
151
- }): Promise<TableDataInfo<TokensListVo>>;
152
- export interface TeamTreeVo {
153
- deptId?: number;
154
- deptName?: string;
155
- deptDesc?: string;
156
- parentId?: number;
157
- memberCount?: number;
158
- quotaUsed?: number;
159
- quotaTotal?: number;
160
- isUnlimited?: boolean;
161
- isEnterpriseAuth?: boolean;
162
- principal?: string;
163
- children?: TeamTreeVo[];
164
- }
165
- export declare function getTeamTree(): Promise<TeamTreeVo[]>;
166
- export interface UsageTrendItem {
167
- date?: string;
168
- amount?: number;
169
- }
170
- export interface TeamMemberListVo {
171
- userId?: number;
172
- userName?: string;
173
- deptUserName?: string;
174
- described?: string;
175
- nickName?: string;
176
- phoneNumber?: string;
177
- email?: string;
178
- deptId?: number;
179
- deptName?: string;
180
- deptDesc?: string;
181
- roleId?: number;
182
- roleName?: string;
183
- status?: string;
184
- statusName?: string;
185
- realNameAuth?: boolean;
186
- enterpriseAuth?: boolean;
187
- quotaTotal?: number;
188
- quotaUsed?: number;
189
- quotaAvailable?: number;
190
- limitType?: string;
191
- createTime?: string;
192
- lastLoginTime?: string;
193
- auditStatus?: number;
194
- auditStatusName?: string;
195
- requestId?: number;
196
- editable?: boolean;
197
- usageTrend?: UsageTrendItem[];
198
- }
199
- export declare function getTeamMembers(params?: {
200
- keyword?: string;
201
- deptId?: string;
202
- roleId?: string;
203
- status?: string;
204
- }): Promise<TableDataInfo<TeamMemberListVo>>;
1
+ export declare const tools: ({
2
+ name: string;
3
+ description: string;
4
+ inputSchema: {
5
+ type: "object";
6
+ properties: {
7
+ days?: undefined;
8
+ recordType?: undefined;
9
+ startDate?: undefined;
10
+ endDate?: undefined;
11
+ orderNo?: undefined;
12
+ status?: undefined;
13
+ redeemCode?: undefined;
14
+ };
15
+ required: never[];
16
+ };
17
+ } | {
18
+ name: string;
19
+ description: string;
20
+ inputSchema: {
21
+ type: "object";
22
+ properties: {
23
+ days: {
24
+ type: string;
25
+ description: string;
26
+ };
27
+ recordType?: undefined;
28
+ startDate?: undefined;
29
+ endDate?: undefined;
30
+ orderNo?: undefined;
31
+ status?: undefined;
32
+ redeemCode?: undefined;
33
+ };
34
+ required: never[];
35
+ };
36
+ } | {
37
+ name: string;
38
+ description: string;
39
+ inputSchema: {
40
+ type: "object";
41
+ properties: {
42
+ recordType: {
43
+ type: string;
44
+ description: string;
45
+ };
46
+ startDate: {
47
+ type: string;
48
+ description: string;
49
+ };
50
+ endDate: {
51
+ type: string;
52
+ description: string;
53
+ };
54
+ days?: undefined;
55
+ orderNo?: undefined;
56
+ status?: undefined;
57
+ redeemCode?: undefined;
58
+ };
59
+ required: never[];
60
+ };
61
+ } | {
62
+ name: string;
63
+ description: string;
64
+ inputSchema: {
65
+ type: "object";
66
+ properties: {
67
+ orderNo: {
68
+ type: string;
69
+ description: string;
70
+ };
71
+ days?: undefined;
72
+ recordType?: undefined;
73
+ startDate?: undefined;
74
+ endDate?: undefined;
75
+ status?: undefined;
76
+ redeemCode?: undefined;
77
+ };
78
+ required: string[];
79
+ };
80
+ } | {
81
+ name: string;
82
+ description: string;
83
+ inputSchema: {
84
+ type: "object";
85
+ properties: {
86
+ status: {
87
+ type: string;
88
+ description: string;
89
+ };
90
+ days?: undefined;
91
+ recordType?: undefined;
92
+ startDate?: undefined;
93
+ endDate?: undefined;
94
+ orderNo?: undefined;
95
+ redeemCode?: undefined;
96
+ };
97
+ required: never[];
98
+ };
99
+ } | {
100
+ name: string;
101
+ description: string;
102
+ inputSchema: {
103
+ type: "object";
104
+ properties: {
105
+ redeemCode: {
106
+ type: string;
107
+ description: string;
108
+ };
109
+ days?: undefined;
110
+ recordType?: undefined;
111
+ startDate?: undefined;
112
+ endDate?: undefined;
113
+ orderNo?: undefined;
114
+ status?: undefined;
115
+ };
116
+ required: string[];
117
+ };
118
+ })[];
119
+ export declare function handle(name: string, args: Record<string, string>): Promise<unknown>;