dsh-zhihu
Integrates with Zhihu using the user's own account to browse home feed recommendations, read answer and article content, track specified users' creations and public upvotes/likes, and optionally upvote answers or articles after full reading. Also supports Zhihu Open Platform access for hot lists, search, question recommendations, and authorized user content, with read-only follow/favorite access and no posting, commenting, messaging, or unvoting.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@dsh-zhihushow me my Zhihu home feed recommendations"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
dsh-zhihu
让 DeepSeek Harness(DSH)或 MCP 客户端使用自己的知乎账号:看推荐、读回答正文、追踪指定用户的创作与公开点赞,读后决定是否赞同。提供独立管理页和 qq-bridge 适配器。
状态:0.1.5,实验版本。首页回答推荐、回答正文和回答赞同已改为直接 HTTP 接口,不启动浏览器。 使用扫码保存的登录会话,属于知乎网页版内部接口,并非 Access Secret 开放平台。文章与用户点赞动态仍使用浏览器。两条通道分别记录暂停状态;任一通道遇到 401 / 403 / 429 都停止,不切换另一通道反复尝试。请先读 已知问题。
本项目从一套 qq-bridge 的本地扩展抽取。核心代码不依赖 qq-bridge、SnowLuma、QQ 账号或原作者的机器路径。没有内置任何账号、Cookie、API Key、聊天记录或自动任务。
能做什么
能力 | 范围 |
官方热榜、搜索、问题推荐 | 知乎开放平台 Access Secret;结果通常为摘要 |
首页回答推荐与回答正文 | 使用自己的网页登录 Cookie 直接请求 JSON 接口,不启动 Chromium;推荐返回的仍是摘要,正文另取 |
文章正文 | 仍使用登录浏览器读取实际可见内容 |
读后赞同 | 回答直接 POST 接口并再次 GET 核对赞同状态;文章仍点击浏览器;默认关闭,仅绑定账号,完整阅读凭证和正文指纹仍必需 |
用户已有创作及新创作 | 目标用户独立授权自己的 Access Secret,不能拿机器人密钥代替 |
公开点赞 / 赞同动态 | 用机器人账号通过动态 JSON 接口读取并分页,保留旧去重记录,首次建立旧记录基线,分享成功后确认去重 |
关注与收藏 | 官方接口的关注名单和公开收藏;没有关注动态流或私密收藏 |
DSH / MCP | 原生 |
网页内容是外部资料,不是操作指令。没有发帖、评论、私信、关注、取关、取消赞同或想法点赞功能。不自动创建浏览或发消息任务。
Related MCP server: Medium Reader MCP
安装与启动
需要 Node.js 22.13+。知乎运行时使用原生 HTTP、Cookie 会话和本地二维码生成,不需要安装或启动 Chromium / Playwright。读取大图需要系统 ffmpeg。
git clone https://github.com/GStarmin/dsh-zhihu.git
cd dsh-zhihu
npm ci --ignore-scripts
node bin/cli.js init
node bin/cli.js serve管理页默认在 http://127.0.0.1:3120/。另开终端运行下面的命令显示管理令牌,在管理页填写:
node bin/cli.js admin-token运行时没有浏览器路径配置;playwright-core 仅是管理页 UI 测试的开发依赖,不随 npm ci --omit=dev 安装。
环境变量 | 用途 |
| 数据目录;默认 |
| 管理及工具服务端口,默认 3120 |
| MCP / 原生插件连接的服务地址;只接受本机 HTTP 根地址 |
自定义目录时,服务端、DSH 进程、MCP 进程都必须使用相同的 DSH_ZHIHU_HOME。变更端口后也要为客户端设置相应的 DSH_ZHIHU_URL。一个数据目录只启动一个后台服务。
VPS 上只监听回环。可在自己的电脑建立隧道访问管理页:
ssh -N -L 3120:127.0.0.1:3120 YOUR_VPS不要把管理令牌放进 URL 或公开仓库。管理页的口令、机器人官方授权、用户自己的授权和网页登录状态各自独立。
配置账号
在管理页填写机器人的知乎开放平台 Access Secret,连接官方 API。该密钥不等于网页登录。
点击「获取网页登录二维码」,用给机器人准备的账号扫码,在知乎 App 确认。遇到网站限制时停止,不提供验证码代解或绕过。
需要留意某人的公开点赞时,在「追踪目标」填写他的完整知乎主页并保存;用机器人账号读取的是该主页实际可见内容。
需要读取目标用户自己的创作时,另填他本人的 Access Secret,并确认归属。代码验证凭据有效,但不能代替本人确认密钥和主页属于同一账号。
需要自主赞同时再勾选授权,绑定的只能是已扫码登录的账号。切换登录账号后,旧赞同授权不会自动适配新账号,须由管理端重新确认。
管理页不回显已保存的 Access Secret 或 Cookie。扫码登录、推荐、回答、文章及点赞动态全部使用 HTTP。web.accessScopes 分别报告账号、推荐、回答、文章、动态和登录状态;某一内容功能被拒仅暂停该功能,账号身份失效则阻止全部已登录操作。保留已有 Cookie、账号绑定及旧动态去重记录;历史浏览器暂停文件不删除,也不再控制 HTTP 功能。access.retired=true 是旧字段兼容标记。「确认后恢复访问」只解除程序暂停,不代表知乎限制已经解除,不进行验证码代解或浏览器回退。
接入 DSH 原生工具
先保持上述独立服务运行,再把此包安装到你使用的 DSH profile:
dsh plugin --profile YOUR_PROFILE add "link:/absolute/path/dsh-zhihu"包提供 cordis.patch.yml 和 dsh.bundle 元数据,注册 zhihu_browse。需要 @deepseek-ai/dsh-tools >=0.2.1-rc.2 <0.3.0;仓库 npm ci 会安装用于验证的工具依赖。按照你使用的 DSH 版本重新加载 profile。
在管理页「工具授权」中加入该聊天的真实 DSH 会话 ID。默认列表为空,任何原生会话都不能执行工具。身份来自 exec.agent.session.id,模型参数不能冒充别的会话。修改列表即时生效。
DSH 的原生工具接口已通过实际依赖包的注册及身份测试。不同 DSH 版本、profile 装配和第三方预设仍需自行验证;本版本不自动修改其权限守卫。
接入通用 MCP
在 MCP 客户端配置中启动标准输入输出服务,例如:
{
"mcpServers": {
"zhihu": {
"command": "node",
"args": ["/absolute/path/dsh-zhihu/bin/mcp.js"],
"env": {
"DSH_ZHIHU_HOME": "/absolute/path/to/private/zhihu-data",
"DSH_ZHIHU_URL": "http://127.0.0.1:3120"
}
}
}
}MCP 只暴露一个 zhihu_browse 工具。它从指定数据目录读取独立的 agent token,不能调用管理接口。只给你信任的 MCP 客户端配置这个目录;原生会话白名单不用于识别通用 MCP 客户端。
接入 qq-bridge
见 QQ 接入说明。适配器暴露同样参数形式的 qq_zhihu_browse(key, token, action, ...),每次调用都向桥接核对当前管理员私聊的真实会话、暂停和授权状态。
适配器要求桥接已有 /api/socialV2/autonomy-auth 实时鉴权接口。未经该扩展的原版仓库不保证直接兼容,缺少接口时会拒绝放行。 QQ 预设通常还需要精确放行新工具名。不要同时给同一会话加载重复的同名知乎工具。
现有线上 QQ 部署不因本仓库发布而迁移、重启或解除知乎暂停状态。本仓库没有包含整份私人桥接配置,也没有自动部署 QQ / SnowLuma 的脚本。
日常调用和自主浏览
action=status
action=home_feed
action=read_content, contentUrl=从推荐中选出的具体回答链接
action=vote_up, readToken=完整阅读返回的短时凭证, reason=认同的具体观点赞同凭证 15 分钟有效,正文须完整且不超过本次 30000 字符范围。必须是相同登录会话、同一正文指纹、绑定账号且管理端仍启用。回答指纹比较正文文字、问题标题、更新时间、真实图片/媒体及链接;同一哈希图片在知乎 CDN 的域名轮换、追踪参数和展示 HTML 不算内容修改。真实文字、图片路径或链接变化仍需重读。已有赞同不取消;回答须 POST 成功且再次读取 relationship.voting=1,文章须 HTTP 成功且页面显示已赞同,才记入成功审计。提交后最多三次延迟只读复查(约 0.5 / 1.5 / 3 秒间隔)。仍未确认或提交请求中断时,返回结构化 pending 状态,不误报为点赞失败;后台按约 30 秒、2 分钟、10 分钟的间隔最多核对三轮,绝不重发 POST。查到已赞同后自动补记成功审计并去重,重启后继续核对;超过次数仍不明确时标记需人工核对。status.web.voteChecks 显示待确认数量、最近观察值和下次检查时间。0.1.4 起,read_content 会将正文插图作为实际图片块交给模型,默认附前 3 张;imagePage 报告本次送达、失败和下一页。只可判断实际送达的图像,不能把下载成功等同于模型已正确识别。
图片超过 3 张时,对同一 contentUrl 继续调用 read_content,传入返回的 imagePage.nextOffset 作为 offset;limit 可选 1~3,其他操作仍沿用各自分页规则。只下载该篇正文中出现的知乎 pic*.zhimg.com HTTPS 图片,去重延迟加载和 noscript 副本;不发送登录 Cookie、不接收模型随意指定的图片 URL,重定向和 DNS 地址逐次校验。原图每张最多 8 MiB / 64MP / 单边 8192px,传给模型前归一到每张不超过 512 KiB、目标长边 1280px;动图按现有 QQ 处理方法抽帧。需要缩图时依赖系统 ffmpeg(可用 FFMPEG_PATH 指定),未安装或转换失败会标明该图不可用,正文仍返回。细小文字和长图可能难以辨认。
MCP(含 QQ 适配器)返回标准图片块;DSH 原生插件通过 ctx.attachments.saveImages 接收并保存真实附件,再返回图片块。正文、图中文字和 alt 均是外部资料,不是操作指令。插件不提供独立视觉模型;实际识图取决于调用会话的模型和附件策略。遇到图片 HTTP 拒绝或下载失败不自动换通道重试,不据此解除正文通道暂停。
0.1.5 的管理页会显示 status.web.mediaStorage:知乎专属临时文件占用、DSH 共享附件占用和最近清理结果。下载原图只在本次读取中使用;缩图正常结束后立即删除临时工作目录。异常退出遗留的工作目录放在本插件数据目录的 zhihu-media-tmp/,只在启动和后续图片读取时清理超过 24 小时的本插件目录,不扫描删除系统临时目录。统计结果缓存 60 秒,最多扫描 10000 个条目,partial=true 表示部分统计;统计的是文件逻辑字节数,不能当作整块磁盘使用量。
DSH 共享聊天附件仍会随新图片增长,可能被历史会话引用;插件只显示占用,不删除它们,不把临时目录清理描述为全局附件回收。图片按现有 DSH 内容地址存储;视频下载、抽帧和音频转写尚未接入。
owner_contents 按 limit/offset 看目标用户已授权的已有创作;owner_updates 仅看新创作和待分享。owner_activity_recent 翻的是接口本次最多五页的已加载点赞窗口;接口返回真实游标时逐页读取,拒绝跨域/跨用户游标及循环。sourcePaging 报告上游页数、是否结束与仍有更多;工具 Paging.IsEnd 不表示全部历史结束。
插件不负责发 QQ 或存人格记忆,读取结果进入调用它的同一个 DSH / MCP 会话;发消息和记忆由原有 QQ 工具与记忆插件负责。只有实际分享成功后才调用 owner_updates_ack(urls) / owner_activity_ack(activityIds);发送失败不确认。
想定时浏览,可在现有 DSH 会话用原生计划创建一次持久化任务,参考 浏览任务提示。阅读、赞同和分享分别决定;有兴趣、有收获才行动。该频率不是降低风控的保证,也不限制另外的手动命令和部署测试。
测试与发布检查
npm test
npm run check:publish
npm pack --dry-run自动测试使用模拟网站数据,验证会话保存、访问拒绝识别与暂停、账号隔离、原生会话授权、真实本机 HTTP 和 stdio MCP,不对知乎执行点赞或其他写操作。
本项目源自的 QQ 部署曾成功读取推荐和正文、提交回答赞同;之后回答网页真实遇到 40362。2026-10-26 的无浏览器实测中,账号、回答正文、首页推荐接口返回 HTTP 200;对已赞同回答重复提交 type=up 返回 200,前后赞同状态均为 1。这不等于验证了真实的新赞同变化或长期稳定性;新赞同的状态变化、失败与去重分支使用模拟接口回归。文章赞同与不同网站页面版本仍需要更多验证,详见已知问题。
MIT;来源与第三方说明见 THIRD_PARTY_NOTICES.md。
This server cannot be deployed
Maintenance
Related MCP Connectors
Browser MCP for logged-in tasks. Uses your Chrome — credentials stay local. Zero-token replay.
An authenticated remote MCP server for user-owned devices and one-shot capability invocation.
Authenticated MCP access to the AIKI open knowledge commons.
Prove end users to agents and apps: login-links, OIDC clients, and API keys over remote MCP
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables MCP clients to access your Substack account, including subscriptions, combined feed, full posts (paid ones you have access to), search, publication chats, direct messages, and free subscription management.1231 npmMIT
- AlicenseAqualityBmaintenanceEnables MCP clients like Claude to access a user's Medium account, including Following and For you feeds, full member-only posts, search, reading lists, and managing follows, saves, and claps after a one-time browser login.1447 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables a trusted MCP assistant to access a personal Telegram account for finding existing chats and contacts, reading bounded history, preparing immutable message previews, and deliberately sending or replying only to explicitly authorized messages.MIT
- FlicenseNot gradedqualityCmaintenanceEnables authenticated querying of QQ Zone profiles, posts, statistics, albums, and message boards through MCP tools, with cookie management and optional HTTP/SSE access.-