@mikoto_zero/minigame-open-mcp 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.
@@ -0,0 +1,120 @@
1
+ /**
2
+ * TapTap Minigame Leaderboard Documentation Tools
3
+ * Each LeaderboardManager API has its own dedicated tool
4
+ */
5
+ import { searchLeaderboardDocs as searchDocs, getLeaderboardOverview as getOverview, LEADERBOARD_DOCUMENTATION } from '../data/leaderboardDocs.js';
6
+ /**
7
+ * Get specific API documentation by name
8
+ */
9
+ function getAPIDoc(categoryKey, apiName) {
10
+ const category = LEADERBOARD_DOCUMENTATION.categories[categoryKey];
11
+ if (!category) {
12
+ return `Category "${categoryKey}" not found`;
13
+ }
14
+ const api = category.apis.find(a => a.name === apiName);
15
+ if (!api) {
16
+ return `API "${apiName}" not found in category "${categoryKey}"`;
17
+ }
18
+ let doc = `# ${api.name}\n\n`;
19
+ doc += `**Method Signature:**\n\`\`\`javascript\n${api.method}\n\`\`\`\n\n`;
20
+ doc += `**Description:** ${api.description}\n\n`;
21
+ if (api.parameters) {
22
+ doc += `## Parameters\n\n`;
23
+ for (const [param, desc] of Object.entries(api.parameters)) {
24
+ doc += `- **\`${param}\`**: ${desc}\n`;
25
+ }
26
+ doc += '\n';
27
+ }
28
+ if (api.returnValue) {
29
+ doc += `## Returns\n\n${api.returnValue}\n\n`;
30
+ }
31
+ doc += `## Code Example\n\n\`\`\`javascript\n${api.example}\n\`\`\`\n`;
32
+ return doc;
33
+ }
34
+ // ============ Core API Tools (one for each LeaderboardManager API) ============
35
+ /**
36
+ * Get documentation for tap.getLeaderboardManager()
37
+ */
38
+ async function getLeaderboardManager() {
39
+ return getAPIDoc('initialization', 'tap.getLeaderboardManager');
40
+ }
41
+ /**
42
+ * Get documentation for openLeaderboard()
43
+ */
44
+ async function openLeaderboard() {
45
+ return getAPIDoc('display', 'openLeaderboard');
46
+ }
47
+ /**
48
+ * Get documentation for submitScores()
49
+ */
50
+ async function submitScores() {
51
+ return getAPIDoc('score_submission', 'submitScores');
52
+ }
53
+ /**
54
+ * Get documentation for loadLeaderboardScores()
55
+ */
56
+ async function loadLeaderboardScores() {
57
+ return getAPIDoc('score_query', 'loadLeaderboardScores');
58
+ }
59
+ /**
60
+ * Get documentation for loadCurrentPlayerLeaderboardScore()
61
+ */
62
+ async function loadCurrentPlayerScore() {
63
+ return getAPIDoc('score_query', 'loadCurrentPlayerLeaderboardScore');
64
+ }
65
+ /**
66
+ * Get documentation for loadPlayerCenteredScores()
67
+ */
68
+ async function loadPlayerCenteredScores() {
69
+ return getAPIDoc('score_query', 'loadPlayerCenteredScores');
70
+ }
71
+ // ============ Helper Tools ============
72
+ /**
73
+ * Search leaderboard documentation by keyword
74
+ */
75
+ async function searchLeaderboardDocs(args) {
76
+ const query = args.query?.toLowerCase() || '';
77
+ if (!query) {
78
+ return 'Please provide a search keyword.';
79
+ }
80
+ const results = searchDocs(query);
81
+ if (results.length === 0) {
82
+ return `No results found for "${query}".\n\nTry searching for: initialization, open, submit, load, score, ranking, leaderboard`;
83
+ }
84
+ return `**🏆 Search Results for "${query}"**\n\n` + results.join('\n---\n\n');
85
+ }
86
+ /**
87
+ * Get complete leaderboard system overview
88
+ */
89
+ async function getLeaderboardOverview() {
90
+ return getOverview();
91
+ }
92
+ /**
93
+ * Get integration patterns and best practices
94
+ */
95
+ async function getLeaderboardPatterns() {
96
+ const category = LEADERBOARD_DOCUMENTATION.categories['common_scenarios'];
97
+ if (!category)
98
+ return 'Common scenarios not found';
99
+ let doc = `# ${category.title}\n\n${category.description}\n\n`;
100
+ for (const api of category.apis) {
101
+ doc += `## ${api.name}\n\n`;
102
+ doc += `${api.description}\n\n`;
103
+ doc += `\`\`\`javascript\n${api.example}\n\`\`\`\n\n`;
104
+ }
105
+ return doc;
106
+ }
107
+ export const leaderboardTools = {
108
+ // Core API tools
109
+ getLeaderboardManager,
110
+ openLeaderboard,
111
+ submitScores,
112
+ loadLeaderboardScores,
113
+ loadCurrentPlayerScore,
114
+ loadPlayerCenteredScores,
115
+ // Helper tools
116
+ searchLeaderboardDocs,
117
+ getLeaderboardOverview,
118
+ getLeaderboardPatterns
119
+ };
120
+ //# sourceMappingURL=leaderboardTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leaderboardTools.js","sourceRoot":"","sources":["../../src/tools/leaderboardTools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Local cache utilities for storing app configuration
3
+ * Separate cache file from tapcode-mcp-h5 to avoid conflicts
4
+ */
5
+ /**
6
+ * Cached application information
7
+ */
8
+ export interface AppCacheInfo {
9
+ developer_id?: number;
10
+ developer_name?: string;
11
+ app_id?: number;
12
+ app_title?: string;
13
+ cached_at?: number;
14
+ }
15
+ /**
16
+ * Get cache file path for minigame leaderboard
17
+ * Uses different directory from tapcode-mcp-h5 to avoid conflicts
18
+ */
19
+ export declare function getCachePath(projectPath?: string): string;
20
+ /**
21
+ * Read cached app information
22
+ */
23
+ export declare function readAppCache(projectPath?: string): AppCacheInfo | null;
24
+ /**
25
+ * Save app information to cache
26
+ */
27
+ export declare function saveAppCache(info: AppCacheInfo, projectPath?: string): void;
28
+ /**
29
+ * Clear cached app information
30
+ */
31
+ export declare function clearAppCache(projectPath?: string): void;
32
+ /**
33
+ * Check if cache is valid (exists and has required fields)
34
+ */
35
+ export declare function isCacheValid(projectPath?: string): boolean;
36
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAUzD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAqBtE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAqB3E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAUxD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAG1D"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Local cache utilities for storing app configuration
3
+ * Separate cache file from tapcode-mcp-h5 to avoid conflicts
4
+ */
5
+ import * as path from 'node:path';
6
+ import * as fs from 'node:fs';
7
+ import * as os from 'node:os';
8
+ /**
9
+ * Get cache file path for minigame leaderboard
10
+ * Uses different directory from tapcode-mcp-h5 to avoid conflicts
11
+ */
12
+ export function getCachePath(projectPath) {
13
+ if (projectPath) {
14
+ // Project-specific cache
15
+ const normalizedPath = projectPath.endsWith('/') ? projectPath : projectPath + '/';
16
+ return path.join(normalizedPath, '.taptap-minigame', 'app.json');
17
+ }
18
+ else {
19
+ // Global cache in user home directory
20
+ const home = os.homedir();
21
+ return path.join(home, '.config', 'taptap-minigame', 'app.json');
22
+ }
23
+ }
24
+ /**
25
+ * Read cached app information
26
+ */
27
+ export function readAppCache(projectPath) {
28
+ const cachePath = getCachePath(projectPath);
29
+ if (!fs.existsSync(cachePath)) {
30
+ return null;
31
+ }
32
+ try {
33
+ const content = fs.readFileSync(cachePath, 'utf8');
34
+ const cache = JSON.parse(content);
35
+ // Validate cache has required fields
36
+ if (cache.developer_id && cache.app_id) {
37
+ return cache;
38
+ }
39
+ return null;
40
+ }
41
+ catch (error) {
42
+ console.error('Failed to read cache:', error);
43
+ return null;
44
+ }
45
+ }
46
+ /**
47
+ * Save app information to cache
48
+ */
49
+ export function saveAppCache(info, projectPath) {
50
+ const cachePath = getCachePath(projectPath);
51
+ const cacheDir = path.dirname(cachePath);
52
+ try {
53
+ // Ensure directory exists
54
+ if (!fs.existsSync(cacheDir)) {
55
+ fs.mkdirSync(cacheDir, { recursive: true });
56
+ }
57
+ // Add timestamp
58
+ const cacheData = {
59
+ ...info,
60
+ cached_at: Date.now()
61
+ };
62
+ // Write to file
63
+ fs.writeFileSync(cachePath, JSON.stringify(cacheData, null, 2), 'utf8');
64
+ }
65
+ catch (error) {
66
+ console.error('Failed to save cache:', error);
67
+ }
68
+ }
69
+ /**
70
+ * Clear cached app information
71
+ */
72
+ export function clearAppCache(projectPath) {
73
+ const cachePath = getCachePath(projectPath);
74
+ if (fs.existsSync(cachePath)) {
75
+ try {
76
+ fs.unlinkSync(cachePath);
77
+ }
78
+ catch (error) {
79
+ console.error('Failed to clear cache:', error);
80
+ }
81
+ }
82
+ }
83
+ /**
84
+ * Check if cache is valid (exists and has required fields)
85
+ */
86
+ export function isCacheValid(projectPath) {
87
+ const cache = readAppCache(projectPath);
88
+ return !!(cache && cache.developer_id && cache.app_id);
89
+ }
90
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,66 @@
1
+ {
2
+ "name": "@mikoto_zero/minigame-open-mcp",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "description": "TapTap Minigame Open API MCP Server - Documentation and Management APIs for TapTap minigame (Leaderboard, and more features coming)",
6
+ "main": "dist/server.js",
7
+ "bin": {
8
+ "minigame-open-mcp": "bin/minigame-open-mcp"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "start": "node dist/server.js",
13
+ "dev": "ts-node src/server.ts",
14
+ "prepublishOnly": "npm run build",
15
+ "test": "jest",
16
+ "lint": "eslint src/**/*.ts",
17
+ "format": "prettier --write src/**/*.ts"
18
+ },
19
+ "keywords": [
20
+ "mcp",
21
+ "model-context-protocol",
22
+ "taptap",
23
+ "minigame",
24
+ "leaderboard",
25
+ "ranking",
26
+ "open-api",
27
+ "game-development",
28
+ "documentation",
29
+ "ai-agent",
30
+ "openhands"
31
+ ],
32
+ "author": "TapTap Team",
33
+ "license": "MIT",
34
+ "engines": {
35
+ "node": ">=16.0.0"
36
+ },
37
+ "dependencies": {
38
+ "@modelcontextprotocol/sdk": "^0.4.0",
39
+ "crypto-js": "^4.2.0"
40
+ },
41
+ "devDependencies": {
42
+ "@types/node": "^20.0.0",
43
+ "@types/crypto-js": "^4.2.0",
44
+ "typescript": "^5.0.0",
45
+ "ts-node": "^10.9.0",
46
+ "jest": "^29.0.0",
47
+ "@types/jest": "^29.0.0",
48
+ "eslint": "^8.0.0",
49
+ "@typescript-eslint/eslint-plugin": "^6.0.0",
50
+ "@typescript-eslint/parser": "^6.0.0",
51
+ "prettier": "^3.0.0"
52
+ },
53
+ "files": [
54
+ "dist/",
55
+ "bin/",
56
+ "data/"
57
+ ],
58
+ "repository": {
59
+ "type": "git",
60
+ "url": "git+https://github.com/taptap/minigame-open-mcp.git"
61
+ },
62
+ "homepage": "https://github.com/taptap/minigame-open-mcp#readme",
63
+ "bugs": {
64
+ "url": "https://github.com/taptap/minigame-open-mcp/issues"
65
+ }
66
+ }