{"url_pattern":"^https?://36kr\\.com(/.*)?$","site_name":"36kr","allowed_domains":["36kr.com","gateway.36kr.com"],"tools":[{"name":"tool_36kr_newsflash","description":"36氪快讯","inputSchema":{"type":"object","properties":{"count":{"type":"string","description":"Number of items to return (default: 20, max: 50)"}},"required":null},"handler":"(params) => {\n  const run = async function(args) {\n\n      const count = Math.min(parseInt(args.count) || 20, 50);\n\n      // 36kr gateway API: POST with JSON body\n      const resp = await fetch('https://gateway.36kr.com/api/mis/nav/newsflash/flow', {\n        method: 'POST',\n        headers: {'Content-Type': 'application/json'},\n        credentials: 'include',\n        body: JSON.stringify({\n          partner_id: 'web',\n          param: {siteId: 1, platformId: 2, pageSize: count, pageEvent: 0},\n          timestamp: Date.now()\n        })\n      });\n\n      if (!resp.ok) {\n        // Fallback: parse SSR page\n        const pageResp = await fetch('https://36kr.com/newsflashes', {credentials: 'include'});\n        if (!pageResp.ok) return {error: 'HTTP ' + pageResp.status, hint: 'Navigate to 36kr.com first'};\n        const html = await pageResp.text();\n        const match = html.match(/window\\.initialState\\s*=\\s*(\\{.*?\\});?\\s*<\\/script/s);\n        if (!match) return {error: 'Failed to parse page data'};\n        try {\n          const state = JSON.parse(match[1]);\n          const list = state.newsflashCatalogData?.data?.newsflashList?.data?.itemList\n                    || state.newsflashCatalogData?.newsflashList?.itemList\n                    || [];\n          const items = list.slice(0, count).map((item, i) => {\n            const m = item.templateMaterial || {};\n            return {\n              rank: i + 1,\n              id: String(item.itemId),\n              title: m.widgetTitle || '',\n              description: (m.widgetContent || '').substring(0, 500),\n              timestamp: m.publishTime ? new Date(m.publishTime).toISOString() : null,\n              url: 'https://36kr.com/newsflashes/' + item.itemId\n            };\n          });\n          return {count: items.length, items, source: 'ssr_fallback'};\n        } catch (e) {\n          return {error: 'JSON parse failed: ' + e.message};\n        }\n      }\n\n      const data = await resp.json();\n      if (data.code !== 0) return {error: 'API error: ' + (data.msg || data.code)};\n\n      const list = (data.data && data.data.itemList) || [];\n      const items = list.slice(0, count).map((item, i) => {\n        const m = item.templateMaterial || {};\n        return {\n          rank: i + 1,\n          id: String(item.itemId),\n          title: m.widgetTitle || '',\n          description: (m.widgetContent || '').substring(0, 500),\n          timestamp: m.publishTime ? new Date(m.publishTime).toISOString() : null,\n          url: 'https://36kr.com/newsflashes/' + item.itemId\n        };\n      });\n\n      return {count: items.length, items};\n  };\n  return run(params || {});\n}"}]}