@mikoto_zero/minigame-open-mcp
Version:
TapTap Minigame Open API MCP Server - Documentation and Management APIs for TapTap minigame (Leaderboard, and more features coming)
120 lines • 3.85 kB
JavaScript
/**
* TapTap Minigame Leaderboard Documentation Tools
* Each LeaderboardManager API has its own dedicated tool
*/
import { searchLeaderboardDocs as searchDocs, getLeaderboardOverview as getOverview, LEADERBOARD_DOCUMENTATION } from '../data/leaderboardDocs.js';
/**
* Get specific API documentation by name
*/
function getAPIDoc(categoryKey, apiName) {
const category = LEADERBOARD_DOCUMENTATION.categories[categoryKey];
if (!category) {
return `Category "${categoryKey}" not found`;
}
const api = category.apis.find(a => a.name === apiName);
if (!api) {
return `API "${apiName}" not found in category "${categoryKey}"`;
}
let doc = `# ${api.name}\n\n`;
doc += `**Method Signature:**\n\`\`\`javascript\n${api.method}\n\`\`\`\n\n`;
doc += `**Description:** ${api.description}\n\n`;
if (api.parameters) {
doc += `## Parameters\n\n`;
for (const [param, desc] of Object.entries(api.parameters)) {
doc += `- **\`${param}\`**: ${desc}\n`;
}
doc += '\n';
}
if (api.returnValue) {
doc += `## Returns\n\n${api.returnValue}\n\n`;
}
doc += `## Code Example\n\n\`\`\`javascript\n${api.example}\n\`\`\`\n`;
return doc;
}
// ============ Core API Tools (one for each LeaderboardManager API) ============
/**
* Get documentation for tap.getLeaderboardManager()
*/
async function getLeaderboardManager() {
return getAPIDoc('initialization', 'tap.getLeaderboardManager');
}
/**
* Get documentation for openLeaderboard()
*/
async function openLeaderboard() {
return getAPIDoc('display', 'openLeaderboard');
}
/**
* Get documentation for submitScores()
*/
async function submitScores() {
return getAPIDoc('score_submission', 'submitScores');
}
/**
* Get documentation for loadLeaderboardScores()
*/
async function loadLeaderboardScores() {
return getAPIDoc('score_query', 'loadLeaderboardScores');
}
/**
* Get documentation for loadCurrentPlayerLeaderboardScore()
*/
async function loadCurrentPlayerScore() {
return getAPIDoc('score_query', 'loadCurrentPlayerLeaderboardScore');
}
/**
* Get documentation for loadPlayerCenteredScores()
*/
async function loadPlayerCenteredScores() {
return getAPIDoc('score_query', 'loadPlayerCenteredScores');
}
// ============ Helper Tools ============
/**
* Search leaderboard documentation by keyword
*/
async function searchLeaderboardDocs(args) {
const query = args.query?.toLowerCase() || '';
if (!query) {
return 'Please provide a search keyword.';
}
const results = searchDocs(query);
if (results.length === 0) {
return `No results found for "${query}".\n\nTry searching for: initialization, open, submit, load, score, ranking, leaderboard`;
}
return `**🏆 Search Results for "${query}"**\n\n` + results.join('\n---\n\n');
}
/**
* Get complete leaderboard system overview
*/
async function getLeaderboardOverview() {
return getOverview();
}
/**
* Get integration patterns and best practices
*/
async function getLeaderboardPatterns() {
const category = LEADERBOARD_DOCUMENTATION.categories['common_scenarios'];
if (!category)
return 'Common scenarios not found';
let doc = `# ${category.title}\n\n${category.description}\n\n`;
for (const api of category.apis) {
doc += `## ${api.name}\n\n`;
doc += `${api.description}\n\n`;
doc += `\`\`\`javascript\n${api.example}\n\`\`\`\n\n`;
}
return doc;
}
export const leaderboardTools = {
// Core API tools
getLeaderboardManager,
openLeaderboard,
submitScores,
loadLeaderboardScores,
loadCurrentPlayerScore,
loadPlayerCenteredScores,
// Helper tools
searchLeaderboardDocs,
getLeaderboardOverview,
getLeaderboardPatterns
};
//# sourceMappingURL=leaderboardTools.js.map