remove: drop Boss直聘 channel (non-functional) (#135)

Boss直聘 channel removed entirely — upstream mcp-bosszp
triggers account-level bans, making it unusable in practice.

Removed from: channel registry, README (CN/EN), install.md,
SKILL.md, tests, credits.

Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
This commit is contained in:
Pnant 2026-03-10 10:14:59 +08:00 committed by GitHub
parent 55efebd395
commit 00d80d2169
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 4 additions and 134 deletions

View file

@ -77,7 +77,6 @@ AI Agent 已经能帮你写代码、改文档、管项目——但你让它去
| 📕 **小红书** | — | 阅读、搜索、发帖、评论、点赞 | 告诉 Agent「帮我配小红书」 |
| 🎵 **抖音** | — | 视频解析、无水印下载链接获取 | 告诉 Agent「帮我配抖音」 |
| 💼 **LinkedIn** | Jina Reader 读公开页面 | Profile 详情、公司页面、职位搜索 | 告诉 Agent「帮我配 LinkedIn」 |
| 🏢 **Boss直聘** | Jina Reader 读职位页 | 搜索职位、向 HR 打招呼 | 告诉 Agent「帮我配 Boss直聘」 |
| 💬 **微信公众号** | 搜索 + 阅读公众号文章(全文 Markdown | — | 无需配置 |
| 📰 **微博** | 热搜、搜索内容/用户/话题、用户动态、评论 | — | 无需配置 |
| 🎙️ **小宇宙播客** | — | 播客音频转文字Whisper 转录,免费 Key | 告诉 Agent「帮我配小宇宙播客」 |
@ -176,7 +175,6 @@ channels/
├── xiaohongshu.py → mcporter MCP ← 可以换成其他 XHS 工具……
├── douyin.py → mcporter MCP ← 可以换成其他抖音工具……
├── linkedin.py → linkedin-mcp ← 可以换成 LinkedIn API……
├── bosszhipin.py → mcp-bosszp ← 可以换成其他招聘工具……
├── wechat.py → camoufox+miku ← 搜索+阅读微信公众号文章
├── rss.py → feedparser ← 可以换成 atoma……
├── exa_search.py → mcporter MCP ← 可以换成 Tavily、SerpAPI……
@ -198,7 +196,6 @@ channels/
| 小红书 | [xiaohongshu-mcp](https://github.com/xpzouying/xiaohongshu-mcp) | ⭐9K+Go 语言Docker 一键部署 |
| 抖音 | [douyin-mcp-server](https://github.com/yzfly/douyin-mcp-server) | MCP 服务,无需登录,视频解析 + 无水印下载 |
| LinkedIn | [linkedin-scraper-mcp](https://github.com/stickerdaniel/linkedin-mcp-server) | ⭐900+MCP 服务,浏览器自动化 |
| Boss直聘 | [mcp-bosszp](https://github.com/mucsbr/mcp-bosszp) | MCP 服务,支持职位搜索和打招呼 |
| 微信公众号 | [wechat-article-for-ai](https://github.com/bzd6661/wechat-article-for-ai) + [miku_ai](https://github.com/GobinFan/Miku_Spider) | Camoufox 隐身浏览器读全文 + 搜狗搜索 |
> 📌 这些都是「当前选型」。不满意?换掉对应文件就行。这正是脚手架的意义。
@ -335,7 +332,7 @@ Yes! Agent Reach is an installer + configuration tool — any AI coding agent th
## 致谢
[Jina Reader](https://github.com/jina-ai/reader) · [yt-dlp](https://github.com/yt-dlp/yt-dlp) · [xreach](https://www.npmjs.com/package/xreach-cli) · [Exa](https://exa.ai) · [mcporter](https://github.com/steipete/mcporter) · [feedparser](https://github.com/kurtmckee/feedparser) · [xiaohongshu-mcp](https://github.com/xpzouying/xiaohongshu-mcp) · [douyin-mcp-server](https://github.com/yzfly/douyin-mcp-server) · [linkedin-scraper-mcp](https://github.com/stickerdaniel/linkedin-mcp-server) · [mcp-bosszp](https://github.com/mucsbr/mcp-bosszp)
[Jina Reader](https://github.com/jina-ai/reader) · [yt-dlp](https://github.com/yt-dlp/yt-dlp) · [xreach](https://www.npmjs.com/package/xreach-cli) · [Exa](https://exa.ai) · [mcporter](https://github.com/steipete/mcporter) · [feedparser](https://github.com/kurtmckee/feedparser) · [xiaohongshu-mcp](https://github.com/xpzouying/xiaohongshu-mcp) · [douyin-mcp-server](https://github.com/yzfly/douyin-mcp-server) · [linkedin-scraper-mcp](https://github.com/stickerdaniel/linkedin-mcp-server)
## 联系

View file

@ -18,7 +18,6 @@ from .exa_search import ExaSearchChannel
from .xiaohongshu import XiaoHongShuChannel
from .douyin import DouyinChannel
from .linkedin import LinkedInChannel
from .bosszhipin import BossZhipinChannel
from .wechat import WeChatChannel
from .weibo import WeiboChannel
from .xiaoyuzhou import XiaoyuzhouChannel
@ -34,7 +33,6 @@ ALL_CHANNELS: List[Channel] = [
XiaoHongShuChannel(),
DouyinChannel(),
LinkedInChannel(),
BossZhipinChannel(),
WeChatChannel(),
WeiboChannel(),
XiaoyuzhouChannel(),

View file

@ -1,63 +0,0 @@
# -*- coding: utf-8 -*-
"""Boss直聘 — check if mcp-bosszp is available."""
import shutil
import subprocess
from .base import Channel
class BossZhipinChannel(Channel):
name = "bosszhipin"
description = "Boss直聘职位搜索"
backends = ["mcp-bosszp", "Jina Reader"]
tier = 2
def can_handle(self, url: str) -> bool:
from urllib.parse import urlparse
domain = urlparse(url).netloc.lower()
return "zhipin.com" in domain or "boss.com" in domain
def check(self, config=None):
mcporter = shutil.which("mcporter")
if not mcporter:
return "off", (
"可通过 Jina Reader 读取职位页面。完整功能需要:\n"
" 1. git clone https://github.com/mucsbr/mcp-bosszp.git\n"
" 2. cd mcp-bosszp && pip install -r requirements.txt && playwright install chromium\n"
" 3. python boss_zhipin_fastmcp_v2.py启动后扫码登录\n"
" 4. mcporter config add bosszhipin http://localhost:8000/mcp"
)
try:
r = subprocess.run(
[mcporter, "config", "get", "bosszhipin", "--json"],
capture_output=True,
encoding="utf-8",
errors="replace",
timeout=5,
)
if r.returncode != 0 or "bosszhipin" not in r.stdout.lower():
return "off", (
"mcporter 已装但 Boss直聘 MCP 未配置。\n"
" 详见 https://github.com/mucsbr/mcp-bosszp"
)
except Exception:
return "off", "mcporter 连接异常"
try:
r = subprocess.run(
[mcporter, "call", "bosszhipin.get_login_info_tool", "--output", "json"],
capture_output=True,
encoding="utf-8",
errors="replace",
timeout=10,
)
out = r.stdout.lower()
if r.returncode == 0 and "\"is_logged_in\": true" in out:
return "ok", "完整可用(职位搜索、登录态检查、向 HR 打招呼)"
if r.returncode == 0:
return "ok", "MCP 已连接,可搜索职位;打招呼前可能需要先登录"
return "warn", "MCP 已配置,但连接异常;请检查 mcp-bosszp 服务状态"
except subprocess.TimeoutExpired:
return "warn", "MCP 已配置,但健康检查超时;请检查 mcp-bosszp 服务状态"
except Exception:
return "warn", "MCP 已配置,但连接异常;请检查 mcp-bosszp 服务状态"

View file

@ -3,7 +3,7 @@ name: agent-reach
description: >
Use the internet: search, read, and interact with 13+ platforms including
Twitter/X, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu (小红书), Douyin (抖音),
WeChat Articles (微信公众号), LinkedIn, Boss直聘, RSS, Exa web search, and any web page.
WeChat Articles (微信公众号), LinkedIn, RSS, Exa web search, and any web page.
Use when: (1) user asks to search or read any of these platforms,
(2) user shares a URL from any supported platform,
(3) user asks to search the web, find information online, or research a topic,
@ -136,14 +136,7 @@ mcporter call 'linkedin.search_people(keyword: "AI engineer", limit: 10)'
Fallback: `curl -s "https://r.jina.ai/https://linkedin.com/in/username"`
## Boss直聘 (mcporter)
```bash
mcporter call 'bosszhipin.get_recommend_jobs_tool(page: 1)'
mcporter call 'bosszhipin.search_jobs_tool(keyword: "Python", city: "北京")'
```
Fallback: `curl -s "https://r.jina.ai/https://www.zhipin.com/job_detail/xxx"`
## RSS (feedparser)
## RSS

View file

@ -66,7 +66,6 @@ Update Agent Reach: https://raw.githubusercontent.com/Panniantong/agent-reach/ma
| 📕 **XiaoHongShu** | Read · Search · **Post · Comment · Like** | mcporter | Via [xiaohongshu-mcp](https://github.com/user/xiaohongshu-mcp) internal API, install and go |
| 🎵 **Douyin** | Video parsing · Watermark-free download | mcporter | Via [douyin-mcp-server](https://github.com/yzfly/douyin-mcp-server), no login needed |
| 💼 **LinkedIn** | Jina Reader (public pages) | Full profiles, companies, job search | Tell your Agent "help me set up LinkedIn" |
| 🏢 **Boss直聘** | Jina Reader (job pages) | Job search, greet recruiters | Tell your Agent "help me set up Boss直聘" |
| 💬 **WeChat Articles** | Search + Read | Zero config | Search + read WeChat Official Account articles (full Markdown) ([wechat-article-for-ai](https://github.com/bzd6661/wechat-article-for-ai) + [miku_ai](https://github.com/GobinFan/Miku_Spider)) |
| 📰 **Weibo** | Trending · Search · Feeds · Comments | Zero config | Hot search, content/user/topic search, feeds, comments ([mcp-server-weibo](https://github.com/Panniantong/mcp-server-weibo)) |
| 🎙️ **Xiaoyuzhou Podcast** | Transcription | Free API key | Podcast audio → full text transcript via Groq Whisper (free) |
@ -203,7 +202,6 @@ channels/
├── xiaohongshu.py → mcporter MCP ← swap to other XHS tools…
├── douyin.py → mcporter MCP ← swap to other Douyin tools…
├── linkedin.py → linkedin-mcp ← swap to LinkedIn API…
├── bosszhipin.py → mcp-bosszp ← swap to other job tools…
├── rss.py → feedparser ← swap to atoma…
├── exa_search.py → mcporter MCP ← swap to Tavily, SerpAPI…
└── __init__.py → Channel registry (for doctor checks)
@ -224,7 +222,6 @@ Each channel file only checks whether its upstream tool is installed and working
| XiaoHongShu | [xiaohongshu-mcp](https://github.com/user/xiaohongshu-mcp) | Internal API, bypasses anti-bot |
| Douyin | [douyin-mcp-server](https://github.com/yzfly/douyin-mcp-server) | MCP server, no login needed, video parsing + watermark-free download |
| LinkedIn | [linkedin-scraper-mcp](https://github.com/stickerdaniel/linkedin-mcp-server) | 900+ stars, MCP server, browser automation |
| Boss直聘 | [mcp-bosszp](https://github.com/mucsbr/mcp-bosszp) | MCP server, job search + recruiter greeting |
| WeChat Articles | [wechat-article-for-ai](https://github.com/bzd6661/wechat-article-for-ai) + [miku_ai](https://github.com/GobinFan/Miku_Spider) | Stealth browser for full article reading + Sogou search |
| Weibo | `mcporter` | `mcporter call 'weibo.get_trendings(limit: 10)'` |
| Xiaoyuzhou Podcast | `transcribe.sh` | `bash ~/.agent-reach/tools/xiaoyuzhou/transcribe.sh <URL>` |
@ -299,7 +296,7 @@ Install douyin-mcp-server, then your agent can use `mcporter call 'douyin.parse_
## Credits
[Jina Reader](https://github.com/jina-ai/reader) · [yt-dlp](https://github.com/yt-dlp/yt-dlp) · [xreach](https://www.npmjs.com/package/xreach-cli) · [Exa](https://exa.ai) · [feedparser](https://github.com/kurtmckee/feedparser) · [douyin-mcp-server](https://github.com/yzfly/douyin-mcp-server) · [linkedin-scraper-mcp](https://github.com/stickerdaniel/linkedin-mcp-server) · [mcp-bosszp](https://github.com/mucsbr/mcp-bosszp)
[Jina Reader](https://github.com/jina-ai/reader) · [yt-dlp](https://github.com/yt-dlp/yt-dlp) · [xreach](https://www.npmjs.com/package/xreach-cli) · [Exa](https://exa.ai) · [feedparser](https://github.com/kurtmckee/feedparser) · [douyin-mcp-server](https://github.com/yzfly/douyin-mcp-server) · [linkedin-scraper-mcp](https://github.com/stickerdaniel/linkedin-mcp-server)
## Contact

View file

@ -272,36 +272,6 @@ pip install linkedin-scraper-mcp
>
> 详见 https://github.com/stickerdaniel/linkedin-mcp-server
**Boss直聘 (可选 — mcp-bosszp):**
> "Boss直聘职位页面可直接读取。完整搜索和打招呼功能需要 mcp-bosszp。"
```bash
mkdir -p ~/.agent-reach/tools && cd ~/.agent-reach/tools
git clone https://github.com/mucsbr/mcp-bosszp.git && cd mcp-bosszp
pip install -r requirements.txt && playwright install chromium
```
> **登录方式(手机 App 扫码):**
>
> mcp-bosszp 使用二维码登录,需要 Boss直聘 App 扫码。
>
> ```bash
> # 1. 启动 MCP 服务
> python boss_zhipin_fastmcp_v2.py
>
> # 2. 通过 MCP 触发登录(会生成二维码图片)
> mcporter call 'bosszhipin.start_login()'
>
> # 3. 浏览器打开二维码图片(服务器上用 http://服务器IP:8000/static/qrcode_xxx.png
> # 4. 用 Boss直聘 App 扫码确认
> ```
>
> 扫码成功后 session 自动保存,之后可以搜索职位和自动打招呼。
>
> 或用 Docker`docker-compose up -d`
>
> 详见 https://github.com/mucsbr/mcp-bosszp
### Step 4: Final check
Run `agent-reach doctor` one final time and report the results to your user.
@ -355,5 +325,4 @@ After installation, use upstream tools directly. See SKILL.md for the full comma
| 小宇宙播客 | `transcribe.sh` | `bash ~/.agent-reach/tools/xiaoyuzhou/transcribe.sh <URL>` |
| 抖音 | `mcporter` | `mcporter call 'douyin.parse_douyin_video_info(...)'` |
| LinkedIn | `mcporter` | `mcporter call 'linkedin.get_person_profile(...)'` |
| Boss直聘 | `mcporter` | `mcporter call 'bosszhipin.search_jobs_tool(...)'` |
| RSS | `feedparser` | `python3 -c "import feedparser; ..."` |

View file

@ -115,7 +115,6 @@ def test_channel_can_handle_contract():
"xiaohongshu": "https://www.xiaohongshu.com/explore/123",
"douyin": "https://www.douyin.com/video/123",
"linkedin": "https://www.linkedin.com/in/test",
"bosszhipin": "https://www.zhipin.com/web/geek/job?query=python",
"weibo": "https://weibo.com/u/1749127163",
"rss": "https://example.com/feed.xml",
"exa_search": "https://example.com",

View file

@ -5,7 +5,6 @@ import shutil
import subprocess
from agent_reach.channels import get_all_channels, get_channel
from agent_reach.channels.bosszhipin import BossZhipinChannel
from agent_reach.channels.xiaohongshu import XiaoHongShuChannel
@ -26,25 +25,6 @@ class TestChannelRegistry:
assert "twitter" in names
class TestBossZhipinChannel:
def test_reports_ok_when_configured_and_logged_in(self, monkeypatch):
monkeypatch.setattr(shutil, "which", lambda _: "/opt/homebrew/bin/mcporter")
def fake_run(cmd, **kwargs):
if cmd[:4] == ["/opt/homebrew/bin/mcporter", "config", "get", "bosszhipin"]:
return subprocess.CompletedProcess(cmd, 0, '{"name":"bosszhipin"}', "")
if cmd[:3] == ["/opt/homebrew/bin/mcporter", "call", "bosszhipin.get_login_info_tool"]:
return subprocess.CompletedProcess(cmd, 0, '{"is_logged_in": true}', "")
raise AssertionError(f"unexpected command: {cmd}")
monkeypatch.setattr(subprocess, "run", fake_run)
assert BossZhipinChannel().check() == (
"ok",
"完整可用(职位搜索、登录态检查、向 HR 打招呼)",
)
class TestXiaoHongShuChannel:
def test_reports_ok_when_server_health_is_ok(self, monkeypatch):
monkeypatch.setattr(shutil, "which", lambda _: "/opt/homebrew/bin/mcporter")