mcp-paike 1.0.0

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.
Files changed (59) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +124 -0
  3. package/dist/__tests__/__mocks__/open.d.ts +2 -0
  4. package/dist/__tests__/__mocks__/open.d.ts.map +1 -0
  5. package/dist/__tests__/__mocks__/open.js +5 -0
  6. package/dist/__tests__/__mocks__/open.js.map +1 -0
  7. package/dist/__tests__/toolRegistry.test.d.ts +2 -0
  8. package/dist/__tests__/toolRegistry.test.d.ts.map +1 -0
  9. package/dist/__tests__/toolRegistry.test.js +160 -0
  10. package/dist/__tests__/toolRegistry.test.js.map +1 -0
  11. package/dist/api/client.d.ts +10 -0
  12. package/dist/api/client.d.ts.map +1 -0
  13. package/dist/api/client.js +58 -0
  14. package/dist/api/client.js.map +1 -0
  15. package/dist/auth/tokenManager.d.ts +30 -0
  16. package/dist/auth/tokenManager.d.ts.map +1 -0
  17. package/dist/auth/tokenManager.js +107 -0
  18. package/dist/auth/tokenManager.js.map +1 -0
  19. package/dist/config/index.d.ts +7 -0
  20. package/dist/config/index.d.ts.map +1 -0
  21. package/dist/config/index.js +20 -0
  22. package/dist/config/index.js.map +1 -0
  23. package/dist/index.d.ts +3 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +144 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/tools/attendances.d.ts +145 -0
  28. package/dist/tools/attendances.d.ts.map +1 -0
  29. package/dist/tools/attendances.js +202 -0
  30. package/dist/tools/attendances.js.map +1 -0
  31. package/dist/tools/auth.d.ts +62 -0
  32. package/dist/tools/auth.d.ts.map +1 -0
  33. package/dist/tools/auth.js +193 -0
  34. package/dist/tools/auth.js.map +1 -0
  35. package/dist/tools/classes.d.ts +125 -0
  36. package/dist/tools/classes.d.ts.map +1 -0
  37. package/dist/tools/classes.js +195 -0
  38. package/dist/tools/classes.js.map +1 -0
  39. package/dist/tools/finance.d.ts +152 -0
  40. package/dist/tools/finance.d.ts.map +1 -0
  41. package/dist/tools/finance.js +319 -0
  42. package/dist/tools/finance.js.map +1 -0
  43. package/dist/tools/index.d.ts +29 -0
  44. package/dist/tools/index.d.ts.map +1 -0
  45. package/dist/tools/index.js +46 -0
  46. package/dist/tools/index.js.map +1 -0
  47. package/dist/tools/sessions.d.ts +126 -0
  48. package/dist/tools/sessions.d.ts.map +1 -0
  49. package/dist/tools/sessions.js +169 -0
  50. package/dist/tools/sessions.js.map +1 -0
  51. package/dist/tools/students.d.ts +171 -0
  52. package/dist/tools/students.d.ts.map +1 -0
  53. package/dist/tools/students.js +295 -0
  54. package/dist/tools/students.js.map +1 -0
  55. package/dist/utils/logger.d.ts +8 -0
  56. package/dist/utils/logger.d.ts.map +1 -0
  57. package/dist/utils/logger.js +73 -0
  58. package/dist/utils/logger.js.map +1 -0
  59. package/package.json +57 -0
@@ -0,0 +1,73 @@
1
+ import { config } from '../config/index.js';
2
+ const LOG_LEVELS = {
3
+ debug: 0,
4
+ info: 1,
5
+ warn: 2,
6
+ error: 3,
7
+ };
8
+ // Sensitive keys that should be redacted from logs
9
+ const SENSITIVE_KEYS = ['token', 'password', 'accesstoken', 'authorization', 'secret', 'key'];
10
+ function shouldLog(level) {
11
+ const configLevel = config.logLevel || 'info';
12
+ return LOG_LEVELS[level] >= LOG_LEVELS[configLevel];
13
+ }
14
+ // Sanitize sensitive data from log arguments
15
+ function sanitizeArgs(args) {
16
+ return args.map(arg => {
17
+ if (typeof arg === 'string') {
18
+ // Check if it looks like a JWT token
19
+ if (arg.startsWith('eyJ') && arg.includes('.')) {
20
+ return '[REDACTED_TOKEN]';
21
+ }
22
+ return arg;
23
+ }
24
+ if (typeof arg === 'object' && arg !== null) {
25
+ const sanitized = {};
26
+ for (const [key, value] of Object.entries(arg)) {
27
+ if (SENSITIVE_KEYS.some(k => key.toLowerCase().includes(k))) {
28
+ sanitized[key] = '[REDACTED]';
29
+ }
30
+ else if (typeof value === 'string' && value.startsWith('eyJ') && value.includes('.')) {
31
+ sanitized[key] = '[REDACTED_TOKEN]';
32
+ }
33
+ else {
34
+ sanitized[key] = value;
35
+ }
36
+ }
37
+ return sanitized;
38
+ }
39
+ return arg;
40
+ });
41
+ }
42
+ function formatMessage(level, message, ...args) {
43
+ const timestamp = new Date().toISOString();
44
+ const prefix = `[${timestamp}] [MCP] [${level.toUpperCase()}]`;
45
+ if (args.length > 0) {
46
+ return `${prefix} ${message} ${JSON.stringify(sanitizeArgs(args))}`;
47
+ }
48
+ return `${prefix} ${message}`;
49
+ }
50
+ export const logger = {
51
+ debug(message, ...args) {
52
+ if (shouldLog('debug')) {
53
+ console.error(formatMessage('debug', message, ...args));
54
+ }
55
+ },
56
+ info(message, ...args) {
57
+ if (shouldLog('info')) {
58
+ console.error(formatMessage('info', message, ...args));
59
+ }
60
+ },
61
+ warn(message, ...args) {
62
+ if (shouldLog('warn')) {
63
+ console.error(formatMessage('warn', message, ...args));
64
+ }
65
+ },
66
+ error(message, ...args) {
67
+ if (shouldLog('error')) {
68
+ console.error(formatMessage('error', message, ...args));
69
+ }
70
+ },
71
+ };
72
+ export default logger;
73
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "mcp-paike",
3
+ "version": "1.0.0",
4
+ "description": "MCP Server for Children's Coding Training Scheduling System - 少儿编程培训排课系统 Claude Code 接口",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "type": "module",
8
+ "bin": {
9
+ "mcp-paike": "./dist/index.js"
10
+ },
11
+ "files": [
12
+ "dist",
13
+ "README.md"
14
+ ],
15
+ "scripts": {
16
+ "build": "tsc",
17
+ "dev": "tsx src/index.ts",
18
+ "start": "node dist/index.js",
19
+ "test": "jest",
20
+ "test:watch": "jest --watch",
21
+ "test:coverage": "jest --coverage",
22
+ "lint": "eslint . --ext .ts",
23
+ "clean": "rm -rf dist"
24
+ },
25
+ "dependencies": {
26
+ "@modelcontextprotocol/sdk": "^1.0.0",
27
+ "axios": "^1.6.0",
28
+ "dotenv": "^16.3.1",
29
+ "open": "^10.1.0"
30
+ },
31
+ "devDependencies": {
32
+ "@types/jest": "^30.0.0",
33
+ "@types/node": "^20.10.0",
34
+ "jest": "^29.7.0",
35
+ "ts-jest": "^29.4.6",
36
+ "tsx": "^4.7.0",
37
+ "typescript": "^5.3.0"
38
+ },
39
+ "engines": {
40
+ "node": ">=18.0.0"
41
+ },
42
+ "keywords": [
43
+ "mcp",
44
+ "claude",
45
+ "scheduling",
46
+ "education",
47
+ "paike"
48
+ ],
49
+ "author": "Bowen Huang",
50
+ "license": "GPL-3.0-only",
51
+ "repository": {
52
+ "type": "git",
53
+ "url": "https://gitee.com/bohecoding/mint_coding_management_system.git",
54
+ "directory": "mcp-server"
55
+ },
56
+ "homepage": "https://gitee.com/bohecoding/mint_coding_management_system/tree/main/mcp-server"
57
+ }