{"url_pattern":"^https?://arxiv\\.org(/.*)?$","site_name":"arxiv","allowed_domains":["arxiv.org","export.arxiv.org"],"tools":[{"name":"arxiv_search","description":"Search arXiv papers by query","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query"},"count":{"type":"number","description":"Number of results (max 50)","default":10}},"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 count = Math.min(args.count || 10, 50);\n\n      const url = `https://export.arxiv.org/api/query?search_query=all:${encodeURIComponent(query)}&start=0&max_results=${count}`;\n      const resp = await fetch(url);\n      if (!resp.ok) return {error: 'HTTP ' + resp.status};\n\n      const xml = await resp.text();\n      const parser = new DOMParser();\n      const doc = parser.parseFromString(xml, 'text/xml');\n\n      const entries = doc.querySelectorAll('entry');\n      const papers = Array.from(entries).map(entry => {\n        const getText = (tag) => {\n          const el = entry.querySelector(tag);\n          return el ? el.textContent.trim() : '';\n        };\n\n        const authors = Array.from(entry.querySelectorAll('author > name'))\n          .map(n => n.textContent.trim());\n\n        const linkEl = entry.querySelector('link[title=\"pdf\"]');\n        const pdfLink = linkEl ? linkEl.getAttribute('href') : '';\n\n        const absLink = entry.querySelector('id')?.textContent.trim() || '';\n\n        const categories = Array.from(entry.querySelectorAll('category'))\n          .map(c => c.getAttribute('term'))\n          .filter(Boolean);\n\n        const arxivId = absLink.replace('http://arxiv.org/abs/', '');\n\n        return {\n          id: arxivId,\n          title: getText('title').replace(/\\s+/g, ' '),\n          abstract: getText('summary').replace(/\\s+/g, ' ').substring(0, 500),\n          authors: authors,\n          published: getText('published').substring(0, 10),\n          categories: categories,\n          url: absLink,\n          pdf: pdfLink\n        };\n      });\n\n      const totalResults = doc.querySelector('totalResults')?.textContent || '0';\n\n      return {\n        query: query,\n        totalResults: parseInt(totalResults),\n        count: papers.length,\n        papers: papers\n      };\n  };\n  return run(params || {});\n}"}]}