费查勒mcp
在未经许可提示的情况下,在Claude Code中获取任何网站。内置网络搜索、Reddit支持和自动机器人挑战绕过。
为什么是费查勒?
Claude Code的内置 WebFetch 请求每个新域名的许可,并完全屏蔽Reddit。fetchaller修复了这两个问题:
fetch:读取任何URL-自动绕过Cloudflare、Akamai和其他机器人挑战search:通过Google+DuckDuckGo进行网络搜索browse_reddit:浏览subreddit列表(热门/新/热门/上升)search_reddit:在全球或子版块内搜索Reddit帖子search_marketplace:使用人类可读的参数(城市名称、类别、价格范围)同时搜索Kijiji、Craigslist和Facebook Marketplaceget_aliexpress_product:速卖通产品详细信息(价格、规格、评级、评论)search_aliexpress:使用价格过滤器和排序搜索速卖通产品get_alibaba_product:Alibaba.com B2B产品详细信息(分层定价、最小起订量、交付周期、供应商信息)search_alibaba:搜索阿里巴巴B2B产品
快速开始
本地安装(stdio模式)
# Clone and install
git clone https://github.com/Averyy/fetchaller-mcp.git
cd fetchaller-mcp
uv sync && patchright install chromium
# Add to Claude Code
claude mcp add fetchaller -- $(pwd)/.venv/bin/python -m fetchaller.main向添加权限 ~/.claude/settings.json:
{
"permissions": {
"allow": [
"mcp__fetchaller__fetch",
"mcp__fetchaller__search",
"mcp__fetchaller__browse_reddit",
"mcp__fetchaller__search_reddit",
"mcp__fetchaller__search_marketplace",
"mcp__fetchaller__get_aliexpress_product",
"mcp__fetchaller__search_aliexpress",
"mcp__fetchaller__get_alibaba_product",
"mcp__fetchaller__search_alibaba"
]
}
}重新启动克劳德代码。
建议添加CLAUDE.md
将此添加到您的项目 CLAUDE.md (或全球 ~/.claude/CLAUDE.md)指示克劳德更喜欢fetchaller:
## Web Fetching & Search
**ALWAYS use fetchaller tools instead of WebFetch and WebSearch.** fetchaller has no domain restrictions and produces cleaner output.
- `mcp__fetchaller__fetch(url, maxTokens?, timeout?)` — Fetch any URL → clean markdown
- `mcp__fetchaller__search(query, page?)` — Web search (Google + DuckDuckGo)
- `mcp__fetchaller__browse_reddit(subreddit, sort?, time?, limit?)` — Browse subreddit listings
- `mcp__fetchaller__search_reddit(query, subreddit?, sort?, time?, limit?)` — Search Reddit posts
- `mcp__fetchaller__search_marketplace(query, location, platforms?, category?, sort?, condition?, min_price?, max_price?)` — Search Kijiji + Craigslist + Facebook Marketplace
- `mcp__fetchaller__get_aliexpress_product(product_id)` — AliExpress product details
- `mcp__fetchaller__search_aliexpress(query, page?, sort?, min_price?, max_price?)` — Search AliExpress
- `mcp__fetchaller__get_alibaba_product(product_id)` — Alibaba.com product details
- `mcp__fetchaller__search_alibaba(query, page?, sort?, min_price?, max_price?)` — Search Alibaba.com用法
这 mcp__fetchaller__fetch 工具现在可用:
# Fetch a URL
fetch https://example.com
# Fetch with token limit
fetch https://example.com maxTokens=10000
# Fetch slow site with longer timeout
fetch https://slow-site.com maxTokens=25000 timeout=60网络搜索
# Search the web
search "python asyncio tutorial"
# Page 2 of results
search "python asyncio tutorial" page=2网络研究模式
- 使用
search查找URL - 使用
fetch阅读它们
工具参考
fetch(url, maxTokens?, timeout?, raw?)
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| url | string | 必填 | 要获取的url(http/https) |
| maxTokens | 数量 | 25000 | 要返回的最大令牌数 |
| timeout | number | 10 | 请求超时(秒) |
| raw | boolean | false | 返回原始HTML而不是markdown |
退货
用以下方法清洁标记:
- 页面标题为H1
- 删除脚本、样式、导航、页脚、iframe
- HTML转换为markdown
- 已注意到重定向
- 内容在令牌限制处截断
边缘案例
| 场景 | 行为 |
|---|---|
| 无效的URL | 错误消息 |
| 非-200响应 | 错误+部分正文 |
| JSON内容 | 按原样返回 |
| XML/RSS提要 | 按原样返回 |
| CSV文件 | 按原样返回 |
| 纯文本 | 按原样返回 |
| PDF文件 | 已提取文本 |
| 超时 | 超时后出错(默认10秒) |
| 巨大的页面 | 截断在maxTokens |
search(query, page?)
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| query | string | 必填 | 搜索查询 |
| 页码 | 1 | 结果页(1个索引) |
同时搜索谷歌(主要)和DuckDuckGo(补充)。返回标题、URL和代码段。页面2+查询仅限谷歌。
Reddit工具
Reddit研究的两个工具:
browse_reddit -浏览子目录列表
browse_reddit({
subreddit: "LocalLLaMA", // without r/ prefix
sort: "hot", // hot, new, top, rising
time: "day", // hour, day, week, month, year, all (for "top" only)
limit: 10 // 1-25
})返回帖子标题、分数、评论数和网址。使用 fetch 阅读完整的帖子。
search_reddit -搜索文章
search_reddit({
query: "best mass spectrometry software",
subreddit: "labrats", // optional - limit to subreddit
sort: "relevance", // relevance, hot, top, new, comments
time: "year", // hour, day, week, month, year, all
limit: 10 // 1-25
})返回具有元数据的匹配帖子。使用 fetch 阅读完整的讨论。
URL转换
所有Reddit网址都会自动转换为 old.reddit.com 可节省65-70%的代币。添加尾随斜线以避免301重定向(节省约50-100ms的延迟):
| 输入URL | 已转换为 |
|---|---|
www.reddit.com/r/foo | old.reddit.com/r/foo/ |
reddit.com/r/foo | old.reddit.com/r/foo/ |
old.reddit.com/r/foo | old.reddit.com/r/foo/ |
速率限制
Reddit每分钟允许约10个未经验证的API请求。 browse_reddit 和 search_reddit 每个使用1个API调用。 fetch 使用HTML(没有API调用)。
速卖通和阿里巴巴工具
get_aliexpress_product(product_id) -产品详情
接受数字产品ID(例如。, 1005006027485365)或完整URL。通过速卖通的MTop API返回价格、规格、评级和最新评论。
search_aliexpress(query, page?, sort?, min_price?, max_price?) -搜索产品
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| query | string | 必填 | 搜索查询 |
| 页码 | 1 | 页码(1-索引) | |
| sort | string | “default” | 默认值,订单,price_asc,price_desc |
| min_price | number | -- | 最低价格过滤器 |
| max_price | number | -- | 最高价格过滤器 |
get_alibaba_product(product_id) -B2B产品详细信息
接受数字产品ID或完整URL。返回分层定价、最小起订量、交付周期、供应商信息和规格。
search_alibaba(query, page?, sort?, min_price?, max_price?) -搜索B2B产品
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| query | string | 必填 | 搜索查询 |
| 页码 | 1 | 页码(1-索引) | |
| sort | string | “default” | 默认值,price_asc,price_desc |
| min_price | number | -- | 最低价格过滤器(美元) |
| max_price | 数字 | -- | 最高价格过滤器(美元) |
市场搜索
search_marketplace --搜索Kijiji、Craigslist和脸书市场
使用人类可读的参数同时搜索所有三个平台,并返回分组结果。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| query | string | 必填 | 搜索关键字 |
| location | string | 必填 | 城市名称(例如“多伦多”、“安大略省圣凯瑟琳”、“西雅图”) |
| platforms | string\[\] | all | 要搜索的平台:kijiji、craigslist、facebook |
| category | string | “all” | all,汽车,电子产品,家具,服装,工具,免费,自行车,手机,摩托车,船,房车,汽车配件,运动,玩具,婴儿 |
| sort | string | “date” | 日期,price_asc,price_desc,相关性 |
| condition | string | -- | 新的,喜欢新的,良好的,一般的 |
| min_price | number | -- | 最低价格(美元) |
| max_price | number | -- | 最高价格(美元) |
Kijiji仅适用于加拿大,美国地区会自动跳过。位置匹配支持精确名称、常用别名(例如“niagara”→ Hamilton CL区域)和拼写错误的模糊匹配。
运作原理
- 验证URL(仅限http/https)
- 阻止私有/内部IP(SSRF保护,防止DNS重新绑定)
- 通过wafer(Rust/BoringSSL)获取类似浏览器的TLS指纹——自动轮换Chrome版本
- 如果检测到机器人挑战:自动解决(请参阅下面的机器人挑战绕过)
- 检测内容类型
- 对于HTML:删除垃圾元素(导航、页脚、广告、cookie横幅),应用特定于站点的清理(25+个站点,包括GitHub、Reddit、HN、维基百科、Medium、Stack Overflow、亚马逊、eBay、速卖通、阿里巴巴、DigiKey、Mouser,以及Ashby/Greehouse、Lever、Gem/Dayforce、Cornerstone、Workday、BambooHR、JazzHR、Work-at-a-Startup工作板,带有嵌入+白标签检测等),转换为降价
- 对于JSON/XML/CSV/text:返回原始数据
- 对于PDF:提取文本
- 截断到令牌限制
机器人挑战绕过
fetchaller透明地绕过了bot挑战。对受保护网站的第一次请求需要更长的时间(总墙时间=求解+获取,通常为10-40秒),但后续请求使用缓存的Cookie并且速度很快(~0.5秒)。这 timeout 参数只控制HTTP获取——浏览器解析有自己的内部超时。
支持的挑战
| 挑战 | 方法 | 速度 |
|---|---|---|
| 阿里云WAF(ACW) | 内联Python求解器 | ~1ms |
| 阿里云WAF(TMD) | 内联预热+浏览器 | ~5-10秒 |
| Cloudflare管理挑战 | Patchright浏览器求解器 | ~3-30秒 |
| Akamai Bot Manager | Patchright浏览器求解器 | ~3-15秒 |
| 亚马逊速率限制/验证码 | Patchright浏览器求解器 | ~3-10秒 |
| DataDome、PerimeterX、Imperva | Patchright浏览器求解器 | ~3-10秒 |
| Kasada | 浏览器CT令牌+Python SHA-256 PoW | ~3-10秒 |
| GeeTest v4滑动验证码 | CV缺口检测+拖动回放 | ~5-15s |
| reCAPTCHA v2 | 复选框→ 音频(耳语)→ ONNX网格 | ~5-30s |
所有挑战的解决都由威化处理 BrowserSolver (基于Patchright)。Cookie按域缓存,因此后续请求跳过挑战。
需求
码头工人:Patchright捆绑的Chromium包含在图像中。这 cookie-data 卷在重启过程中持续存在已解决的Cookie。无需额外设置。
本地(stdio):默认情况下包含浏览器支持(Patchright)。跑 patchright install chromium 安装后下载浏览器二进制文件。Docker会自动包含它。
建筑
内容处理
src/fetchaller/content/ 处理HTML→降价转换。每个站点模块导出 is_(url), SELECTORS_LIST,并且可选 strip__junk(soup) / postprocess_(markdown):
html.py--通用管道+调度。通用垃圾选择器、markdownify、空白清理。通用JSON-LD产品回退。amazon.py--所有顶级域名(.com、.ca、.co.uk、.de等)。CSS选择器、汤清理、正则表达式后处理器。github.py--CSS选择器、URL转换、文件树提取、从嵌入式JSON中提取问题/PR/讨论。reddit.py--用于old.redit.com、URL转换(www)的CSS选择器→旧),后格式化。hackernews.py--CSS选择器、表格展开、故事块重新格式化器。medium.py--CSS选择器(数据testid),基于HTML的未知自定义域检测。huggingface.py--数据目标属性选择器、过滤器标签/按钮清理。stackoverflow.py--所有Stack Exchange站点。CSS选择器、汤清理、正则表达式后处理器。redflagdeals.py--RFD特定的CSS选择器、汤清理、正则表达式后处理器。forums.py--通用论坛支持(XenForo、vBulletin、phpBB、Discourse)。RSS/Atom提要自动发现。wikipedia.py--用于编辑按钮、导航框、TOC、参考列表的CSS选择器。alibaba.py--嵌入式JSON提取(window.detailData,window.__page__data_sse10),汤清理。aliexpress.py--CSS选择器、汤清理、正则表达式后处理器。craigslist.py--所有城市子域。CSS选择器、正则表达式后处理器。搜索SAPI拦截的URL检测。facebook_marketplace.py--仅检测URL。GraphQL客户端facebook_marketplace/包裹。digikey.py--所有TLD。CSS选择器,汤清理。Akamai后面(晶圆手柄)。没有API键的HTML回退。ebay.py--所有TLD。JSON-LD产品提取、搜索结果DOM提取(.s-item),正则表达式后处理器。molex.py--JSON-LD产品提取(附加属性规范)。CSR站点——仅在结构化数据中提供规范。mouser.py--所有TLD。CSS选择器,汤清理。在Akamai的背后。没有API键的HTML回退。soylent.py--Shopify商店清理,从中提取库存gsf_conversion_data.ti.py--文档查看器支持延迟加载的数据表。ashby.py/greenhouse.py/lever.py/gem.py/dayforce.py/cornerstone.py/workday.py/bamboohr.py/jazzhr.py/workatastartup.py--工作板平台。所有这些都保留了源自己的字段名、枚举值和节标题。每个帖子和(在支持的情况下)板列表都在通用HTML管道之前发送到平台的API/JSON外壳。五个嵌入/白标签检测器在HTML阶段运行,因此公司职业页面如synaptivemedical.com/job-openings(白色标签Dayforce),skywatch.com/careers/(阿什比 `),avidbots.com/company/careers/(BambooHR
),以及 earthdaily.com/job-openings (JazzHR多租户)升级为结构化ATS输出,而不是返回空的SPA外壳。看 docs/site-apis.md` 关于端点和检测的详细信息。
搜索
src/fetchaller/search/ --谷歌+DuckDuckGo合并。结果合并/去重、5分钟缓存、验证码回退。用途 wafer.AsyncSession(profile=Profile.OPERA_MINI).
特定于站点的API拦截
HTML抓取产生垃圾的CSR站点被拦截 fetch_url() 并路由到结构化API:
- 克雷格列表 (
src/fetchaller/craigslist/)--SAPI v8客户端(sapi.craigslist.org).最多120个项目/请求,总计数。来自页面HTML的区域ID,按主机名缓存。列表页面保留在HTML管道中。 - 村庄 (
src/fetchaller/kijiji/)--未经身份验证的Apollo GraphQL(kijiji.ca/anvil/api).搜索+列出详细信息。价格以美分计。 - Facebook市场 (
src/fetchaller/facebook_marketplace/)--GraphQL(facebook.com/api/graphql/).地理编码搜索,用照片列出细节。 - 全球速卖通 (
src/fetchaller/aliexpress/)-针对产品的MTop API(令牌引导+MD5签名)。用于搜索的SSR HTML。点评来自feedback.aliexpress.com. - 阿里巴巴 (
src/fetchaller/alibaba/)--内嵌JSON的SSR HTML。国际网站没有MTop API。 - 易贝 --SSR搜索结果提取自
.s-itemDOM元素,格式为编号列表。 - 鼠标器 (
src/fetchaller/mouser/)-搜索API客户端。需要MOUSER_API_KEY. - DigiKey (
src/fetchaller/digikey/)-OAuth2 client_credentials API。需要DIGIKEY_CLIENT_ID+DIGIKEY_CLIENT_SECRET. - 市场搜索 (
src/fetchaller/marketplace/)--统一协调器同时搜索Kijiji、Craigslist和Facebook Marketplace。映射到平台特定值的人类可读参数。对于非加拿大地区,自动跳过Kijiji。 - Dayforce HCM (
src/fetchaller/content/dayforce.py)--从SSR发布详细信息__NEXT_DATA__.通过CSRF保护的POST登录到/api/geo/{namespace}/jobposting/search(下一个认证/api/auth/csrf需要往返)。通过以下方式检测公司域上的白标部署__NEXT_DATA__.runtimeConfig.BASE_URL并重写为正典jobs.dayforcehcm.com板URL。 - 基石点播 (
src/fetchaller/content/cornerstone.py)--SPA外壳中装有JWTcsod.context.发布自services/x/job-requisition/v2/requisitions/{reqid}/jobDetails;董事会上市公告rec-job-search/external/jobs区域云主机(us|eu|uk|au.api.csod.com). - 工作日 (
src/fetchaller/content/workday.py) —{tenant}.wd{1-103}.myworkdayjobs.com董事会和帖子。发布GET/wday/cxs/{tenant}/{site}/job{externalPath};板POST/wday/cxs/{tenant}/{site}/jobs按20个批次分页(最多200个)。 - BambooHR (
src/fetchaller/content/bamboohr.py) —{tenant}.bamboohr.com/careers.Board GET/careers/list;发布GET/careers/{id}/detail。两者都返回未经身份验证的干净JSON。小部件嵌入(`
`)公司网站会自动检测并解析为租户子域。
- Jazzhr (
src/fetchaller/content/jazzhr.py) —{tenant}.applytojob.com/apply.Board SSR HTML(.list-group .list-group-item);发布内容为schema.orgJobPostingJSON-LD。通过JS引用一个或多个JazzHR租户的公司网站(例如。earthdaily.com/job-openings)自动聚合到一个组合板中。
HTTP传输(晶圆)
所有HTTP都由 wafer (~/code/wafer).Fetchaller不包含机器人保护、挑战解决或TLS指纹代码。如果一个站点阻止了请求,请将其固定在晶圆上。
远程部署(HTTP模式)
将fetchaller部署为Claude.ai、Claude Desktop或任何MCP客户端的远程MCP服务器。
快速开始
# Run with authentication
MCP_API_KEY=your-secret-key python -m fetchaller.main --http
# Or use Docker
docker compose up -d本地开发
# Build and test locally
docker compose -f docker-compose.local.yml up --build
# Test endpoints
curl http://localhost:6000/health
curl -X POST http://localhost:6000/mcp \
-H "Authorization: Bearer test-api-key-local" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/list","id":1}'克劳德代码/桌面配置
{
"mcpServers": {
"fetchaller": {
"type": "streamable-http",
"url": "https://mcp.fetchaller.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}Claude.ai自定义连接器(OAuth)
对于支持跨平台同步的Claude.ai网络/移动设备:
- 前往设置→ 连接器→ 添加自定义连接器
- 名称:
fetchaller - 统一资源定位符:
https://mcp.fetchaller.com/mcp - 留下客户ID/密码 空白
- 提示时输入API密钥
环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
HTTP_PORT | 6000 | 服务器端口(1-65535) |
MCP_API_KEY | (必需) | 身份验证的承载令牌 |
MCP_SERVER_URL | http://localhost:$PORT | OAuth的公共URL |
JWT_SECRET | (从API密钥派生) | OAuth令牌的机密 |
RATE_LIMIT_REQUESTS | 每IP每分钟100个请求 | |
MOUSER_API_KEY | - | 鼠标搜索API键(免费注册) |
DIGIKEY_CLIENT_ID | - | DigiKey API客户端ID(免费注册) |
DIGIKEY_CLIENT_SECRET | - | DigiKey API客户机密 |
安全
- SSRF保护:阻止本地主机、私有IP、链接本地地址和DNS重新绑定服务(nip.io、xip.io等)。解析主机名以验证最终IP地址。
- OAuth 2.1:所有令牌交换都需要PKCE。对身份验证代码进行定时安全比较。
- 速率限制:具有可配置限制的每IP速率限制。
文件
fetchaller-mcp/
├── pyproject.toml # Python package config
├── src/fetchaller/ # Python source
│ ├── main.py # Entry point
│ ├── server.py # MCP server setup
│ ├── config.py # Configuration
│ ├── http/ # HTTP server (FastAPI)
│ ├── tools/ # MCP tools (fetch, search, reddit, aliexpress, alibaba, marketplace)
│ ├── content/ # Content processing (HTML→markdown, site-specific cleanup)
│ ├── search/ # Web search (Google + DuckDuckGo)
│ ├── aliexpress/ # AliExpress MTop API client, product, search, reviews
│ ├── alibaba/ # Alibaba.com product and search extraction
│ ├── mouser/ # Mouser Search API client
│ ├── craigslist/ # Craigslist SAPI client + location resolution
│ ├── kijiji/ # Kijiji GraphQL API client + location resolution
│ ├── facebook_marketplace/# Facebook Marketplace GraphQL client
│ ├── marketplace/ # Unified marketplace search orchestrator
│ ├── digikey/ # DigiKey API client (OAuth2 + product/search)
│ ├── cache/ # Response caching
│ ├── queue/ # Reddit rate limiting
│ └── security/ # SSRF, crypto, XSS
├── docker-compose.yml # Production deployment
├── docker-compose.local.yml # Local testing
├── Dockerfile # Container build
├── docs/ # Architecture & developer docs
├── CLAUDE.md # Instructions for Claude
├── README.md # This file
└── landing/ # Static site (fetchaller.com)
├── index.html # Landing page
└── llms.txt # LLM-readable project summary (llmstxt.org spec)依赖项
wafer-py[browser]-具有TLS指纹识别、机器人挑战绕过和浏览器求解器的HTTP传输(Rust/BoringsLSL+Patchright)mcp-MCP协议SDKfastapi+uvicorn-HTTP服务器beautifulsoup4+markdownify-HTML标记pymupdf4llm-PDF转markdown提取pyjwt-OAuth令牌
测试
# Run tests
uv sync --extra dev
.venv/bin/ruff check src/ tests/
.venv/bin/python -m pytest tests/ -x -q
# Test in Docker
docker compose -f docker-compose.local.yml up --build
curl http://localhost:6000/health许可证
麻省理工学院
