list_wwdc_videos
Browse WWDC session videos with offline transcripts and code. Filter by year, topic, or code examples to discover Apple developer content.
Instructions
Browse WWDC session videos with full offline access to transcripts and code. Shows all available sessions with filtering options. Use this to discover WWDC content, find sessions by topic, or identify videos with code examples.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | ||
| topic | No | ||
| hasCode | No | ||
| limit | No |
Implementation Reference
- src/mcp.ts:90-132 (registration)Dynamically parses tool descriptions from remote API (for mcpID 1777316659692547) and registers each tool (including 'list_wwdc_videos') with the MCP server using dynamic Zod schemas and a generic proxy handler.for (const apiDesc of apiDescList) { let inputSchema = JSON.parse(apiDesc.inputSchema); const zodDict: Record<string, z.ZodTypeAny> = {}; Object.entries(inputSchema.properties).forEach(([name, propConfig]) => { let zodType; let pt = (propConfig as { type: string }).type; switch (pt) { case 'string': zodType = z.string(); break; case 'number': zodType = z.number(); break; case 'boolean': zodType = z.boolean(); break; case 'integer': zodType = z.bigint(); break; case 'array': zodType = z.array(z.any()); break; case 'object': zodType = z.object(z.any()); break; default: zodType = z.any(); } if (inputSchema.required?.includes(name)) { zodDict[name] = zodType; } else { zodDict[name] = zodType.optional(); } }); addToolXiaoBenYangApi( apiDesc.name, apiDesc.description ? apiDesc.description : apiDesc.name, zodDict); }
- src/mcp.ts:39-48 (handler)Generic handler invoked for 'list_wwdc_videos' and all other tools. Validates toolName, merges args, and proxies to remote calcXiaoBenYangApi.const handleXiaoBenYangApi = async (args: Record<string, any>, toolName: string) => { // 校验aid是否存在 if (toolName === undefined || toolName === null) { throw new Error("缺少必要参数 'aid'"); } // 合并参数 const fullArgs = {...args, toolName: toolName}; // 调用API return calcXiaoBenYangApi(fullArgs); };
- src/mcp.ts:15-36 (helper)Core proxy function that makes HTTP POST to remote https://mcp.xiaobenyang.com/api with toolName='list_wwdc_videos', apiKey, and args; returns formatted response.const calcXiaoBenYangApi = async function (fullArgs: Record<string, any>) { // 发起 POST 请求 let response = await fetch('https://mcp.xiaobenyang.com/api', { method: 'POST', headers: { 'XBY-APIKEY': apiKey, 'func': fullArgs.toolName, 'mcpid': mcpID }, body: new URLSearchParams(fullArgs) }); const apiResult = await response.text(); return { content: [ { type: "text", text: apiResult // 将字符串结果放入 content 中 } ] } as { [x: string]: unknown; content: [{ type: "text"; text: string }] }; };
- src/mcp.ts:50-65 (helper)Helper function called for each tool to register it with MCP server, providing name (e.g. 'list_wwdc_videos'), description, dynamic inputSchema, and the generic handler lambda.const addToolXiaoBenYangApi = function ( name: string, desc: string, params: Record<string, ZodType> ) { server.registerTool( name, { title: name, description: desc, inputSchema: params, } , async (args: Record<string, any>) => handleXiaoBenYangApi(args, name) ) };
- src/mcp.ts:6-6 (registration)Defines the mcpID used to fetch the list of tools from remote, which includes 'list_wwdc_videos'.const mcpID: string = '1777316659692547';