{"url_pattern":"^https?://zzk\\.cnblogs\\.com(/.*)?$","site_name":"cnblogs","allowed_domains":["zzk.cnblogs.com"],"tools":[{"name":"cnblogs_search","description":"博客园技术文章搜索","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query"},"page":{"type":"string","description":"Page number (default 1)"}},"required":["query"]},"handler":"(params) => {\n  const run = async function(args) {\n\n      const query = args.query;\n      if (!query) return {error: 'query is required'};\n      const page = args.page || 1;\n\n      const url = 'https://zzk.cnblogs.com/s?w=' + encodeURIComponent(query) + '&p=' + page;\n      const resp = await fetch(url, {credentials: 'include'});\n      if (!resp.ok) return {error: 'HTTP ' + resp.status};\n\n      const html = await resp.text();\n      const parser = new DOMParser();\n      const doc = parser.parseFromString(html, 'text/html');\n\n      const items = doc.querySelectorAll('.searchItem');\n      const results = [];\n\n      items.forEach(item => {\n        const titleEl = item.querySelector('.searchItemTitle a');\n        if (!titleEl) return;\n\n        const title = (titleEl.textContent || '').trim();\n        if (!title) return;\n\n        const href = titleEl.getAttribute('href') || '';\n\n        const authorEl = item.querySelector('.searchItemInfo-userName a');\n        const author = authorEl ? (authorEl.textContent || '').trim() : '';\n\n        const snippetEl = item.querySelector('.searchCon');\n        const snippet = snippetEl ? (snippetEl.textContent || '').trim() : '';\n\n        const dateEl = item.querySelector('.searchItemInfo-publishDate');\n        const date = dateEl ? (dateEl.textContent || '').trim() : '';\n\n        const viewEl = item.querySelector('.searchItemInfo-views');\n        const views = viewEl ? (viewEl.textContent || '').trim() : '';\n\n        results.push({\n          title: title,\n          url: href,\n          author: author,\n          snippet: snippet.substring(0, 300),\n          date: date,\n          views: views\n        });\n      });\n\n      return {\n        query: query,\n        page: page,\n        count: results.length,\n        results: results\n      };\n  };\n  return run(params || {});\n}"}]}