实时数据/今日头条热榜
Access trending topics and popular content from Jinri Toutiao's hot list to stay informed about current discussions and viral news.
Instructions
实时数据/今日头条热榜
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/test_stdio_list.js:139-157 (registration)Dynamically registers MCP tools loaded from https://xiaobenyang.com/api/{MCP_ID}. Each tool's name is set to apiDesc.title, so the tool '实时数据/今日头条热榜' is registered here if present in the remote API response's tools list.
const addToolXiaoBenYangApi = function (aid, title, desc, params) { server.addTool({ name: title, description: desc, parameters: params, execute: async (args) => { // 合并用户输入 args 和工具专属 aid const fullArgs = {...args, aid: aid}; return calcXiaoBenYangApi(fullArgs); } }); } for (const apiDesc of apiDescList) { addToolXiaoBenYangApi(apiDesc.apiId.toString(), apiDesc.title, apiDesc.description ? apiDesc.description : apiDesc.title, convertParamsToZ(apiDesc.params)); } - src/test_stdio_list.js:6-17 (handler)Core execution logic for all tools. Called with {..., aid: toolId} to POST request to the remote API, implementing the behavior for '实时数据/今日头条热榜'.
const calcXiaoBenYangApi = async function (fullArgs) { // 发起 GET 请求 let response = await fetch('https://xiaobenyang.com/api', { method: 'POST', headers: { 'APIKEY': process.env.API_KEY, 'aid': fullArgs.aid }, body: new URLSearchParams(fullArgs) }); return await response.text(); } - src/test_stdio_list.js:109-123 (schema)Converts Java-style parameter descriptions from the remote API into Zod input schemas for MCP tools.
const convertParamsToZ = function (params) { let zParams = {}; for (const param of params) { let zodType = convertJavaTypeToZod(param.type) if (param.description) { zodType = zodType.describe(param.name); } if (param.required) { zodType = zodType.optional(); } zParams[param.name] = zodType; } return z.object(zParams); } - src/test_stdio_list.js:89-106 (helper)Helper to convert Java type strings (with generics) from API descriptions into Zod validators, used in schema generation.
function convertJavaTypeToZod(javaType) { // 解析泛型(如处理 "List<Integer>" 这种格式) const {base: baseType, generics} = parseGenericType(javaType); // 优先匹配全类名(如 "java.lang.String") if (JAVA_TO_ZOD_MAP[baseType]) { return JAVA_TO_ZOD_MAP[baseType](...generics); } // 若全类名未匹配,提取简单类名再匹配(如 "String" 从 "java.lang.String" 提取) const simpleTypeName = baseType.split('.').pop(); if (JAVA_TO_ZOD_MAP[simpleTypeName]) { return JAVA_TO_ZOD_MAP[simpleTypeName](...generics); } // 未匹配的类型默认视为自定义对象(返回 z.object(),需手动补充) return z.object({}); } - src/test_stdio_list.js:54-82 (helper)Helper to parse Java generic types like 'List<String>' or nested, used in Zod schema conversion.
function parseGenericType(javaType) { const angleBracketIndex = javaType.indexOf('<'); if (angleBracketIndex === -1) { return {base: javaType.trim(), generics: []}; } // 提取基础类型(如 "List<String>" → "List") const baseType = javaType.slice(0, angleBracketIndex).trim(); // 提取泛型参数(如 "List<String>" → "String") const genericsStr = javaType.slice(angleBracketIndex + 1, javaType.lastIndexOf('>')).trim(); // 处理嵌套泛型(如 "Map<String, List<Integer>>") const generics = []; let balance = 0; // 用于处理嵌套 <> 的平衡 let current = ''; for (const char of genericsStr) { if (char === '<') balance++; if (char === '>') balance--; if (char === ',' && balance === 0) { generics.push(current.trim()); current = ''; } else { current += char; } } if (current) generics.push(current.trim()); return {base: baseType, generics}; }