Skip to main content
Glama

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

原生 zhihu_browse、通用 MCP、带桥接实时鉴权的 QQ 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 安装。

环境变量

用途

DSH_ZHIHU_HOME

数据目录;默认 ${DSH_HOME 或 ~/.dsh}/zhihu

DSH_ZHIHU_PORT

管理及工具服务端口,默认 3120

DSH_ZHIHU_URL

MCP / 原生插件连接的服务地址;只接受本机 HTTP 根地址

自定义目录时,服务端、DSH 进程、MCP 进程都必须使用相同的 DSH_ZHIHU_HOME。变更端口后也要为客户端设置相应的 DSH_ZHIHU_URL。一个数据目录只启动一个后台服务。

VPS 上只监听回环。可在自己的电脑建立隧道访问管理页:

ssh -N -L 3120:127.0.0.1:3120 YOUR_VPS

不要把管理令牌放进 URL 或公开仓库。管理页的口令、机器人官方授权、用户自己的授权和网页登录状态各自独立。

配置账号

  1. 在管理页填写机器人的知乎开放平台 Access Secret,连接官方 API。该密钥不等于网页登录。

  2. 点击「获取网页登录二维码」,用给机器人准备的账号扫码,在知乎 App 确认。遇到网站限制时停止,不提供验证码代解或绕过。

  3. 需要留意某人的公开点赞时,在「追踪目标」填写他的完整知乎主页并保存;用机器人账号读取的是该主页实际可见内容。

  4. 需要读取目标用户自己的创作时,另填他本人的 Access Secret,并确认归属。代码验证凭据有效,但不能代替本人确认密钥和主页属于同一账号。

  5. 需要自主赞同时再勾选授权,绑定的只能是已扫码登录的账号。切换登录账号后,旧赞同授权不会自动适配新账号,须由管理端重新确认。

管理页不回显已保存的 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。

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables 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.
    12
    31 npm
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables 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.
    14
    47 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables 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
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables authenticated querying of QQ Zone profiles, posts, statistics, albums, and message boards through MCP tools, with cookie management and optional HTTP/SSE access.
    -