Hwip
What it does
Notify your phone, ask questions and get answers back from AI coding agents via Hwip.
- Connects 在你的电脑上运行
- Account or key Needs HWIP_API_KEY
- Category 开发者工具
安装
选择你使用的 AI 应用,然后复制设置。
通过 3/3 项检查 · 在你的电脑上运行
第一步:你用哪个 AI?
选择你用的应用,步骤会显示在下方。
可连接 Claude,但需要先准备
需要 Hwip 的密钥(在开发者网站创建) · 需要先在电脑上安装 Node.js(只需一次) · 仅限电脑上的 Claude 应用(Windows 或 Mac),网页和手机不可用
打开电脑版 Claude 应用的设置文件
SettingsDeveloperEdit Config
粘贴这些设置并保存文件
{ "mcpServers": { "hwipit": { "command": "npx", "args": [ "-y", "@hwip/mcp-server" ], "env": { "HWIP_API_KEY": "your-value" } } } }只把密钥粘贴到应用的输入框里,不要粘贴到聊天中或发给任何人
退出 Claude 再重新打开
试一试
用 Hwip 告诉我你能帮我做什么,然后做一件给我看✓ 如果 Claude 说正在使用 Hwip,或回答中出现 Hwip 的工具名称,就表示连接成功
菜单名称已于 2026年11月11日 对照 Anthropic 帮助页面核实 · 你的界面可能因版本略有不同
ChatGPT 暂时无法连接 Hwip
Hwip 需要安装在你的电脑上,而 ChatGPT 只能连接在网上运行的服务器
你可以改用这些方式
A · 使用能连接 Hwip 的应用
- 需要 Hwip 的密钥(在开发者网站创建) · 需要先在电脑上安装 Node.js(只需一次) · 仅限电脑上的 Claude 应用(Windows 或 Mac),网页和手机不可用
- 需要 Hwip 的密钥(在开发者网站创建) · 需要先在电脑上安装 Node.js(只需一次)
- 需要 Hwip 的密钥(在开发者网站创建) · 需要先在电脑上安装 Node.js(只需一次)
- 需要 Hwip 的密钥(在开发者网站创建) · 需要先在电脑上安装 Node.js(只需一次)
B · 开发者工具 类中能连接 ChatGPT 的其他服务器
从同类中使用较多的里挑选,仅限用地址即可连接、无需密钥的
- Sentry✓ ChatGPT
- Compiler Explorer✓ ChatGPT
- GitDiagram✓ ChatGPT
可连接 Claude Code,但需要先准备
需要 Hwip 的密钥(在开发者网站创建) · 需要先在电脑上安装 Node.js(只需一次)
注册并创建 Hwip 的密钥
打开开发者网站,注册账户并创建 API 密钥,下一步要用。价格和免费方案请看开发者网站。
获取密钥的方法见下方开发者的 README
打开终端
Mac:按 Command+空格,输入 Terminal · Windows:打开 PowerShell
粘贴这条命令并按 Enter
claude mcp add --scope user hwipit --env HWIP_API_KEY=your-value -- npx -y @hwip/mcp-server按 Enter 前,把“your-value”改成你的密钥
只把密钥粘贴到应用的输入框里,不要粘贴到聊天中或发给任何人
在 Claude Code 中输入 /mcp
应能看到 Hwip 在列表中并显示已连接
试一试
用 Hwip 告诉我你能帮我做什么,然后做一件给我看✓ 如果 Claude Code 说正在使用 Hwip,或回答中出现 Hwip 的工具名称,就表示连接成功
菜单名称已于 2026年11月11日 对照 Anthropic 帮助页面核实 · 你的界面可能因版本略有不同
可连接 Cursor,但需要先准备
需要 Hwip 的密钥(在开发者网站创建) · 需要先在电脑上安装 Node.js(只需一次)
注册并创建 Hwip 的密钥
打开开发者网站,注册账户并创建 API 密钥,下一步要用。价格和免费方案请看开发者网站。
获取密钥的方法见下方开发者的 README
填写你的密钥
在 Hwip 的设置中,HWIP_API_KEY 还是空的,填入你的密钥并保存
只把密钥粘贴到应用的输入框里,不要粘贴到聊天中或发给任何人
在 Cursor 中以 Agent 模式打开 AI 聊天
试一试
用 Hwip 告诉我你能帮我做什么,然后做一件给我看✓ 如果 Cursor 说正在使用 Hwip,或回答中出现 Hwip 的工具名称,就表示连接成功
菜单名称已于 2026年11月11日 对照 Cursor 帮助页面核实 · 你的界面可能因版本略有不同
可连接 VS Code,但需要先准备
需要 Hwip 的密钥(在开发者网站创建) · 需要先在电脑上安装 Node.js(只需一次)
注册并创建 Hwip 的密钥
打开开发者网站,注册账户并创建 API 密钥,下一步要用。价格和免费方案请看开发者网站。
获取密钥的方法见下方开发者的 README
填写你的密钥
在 Hwip 的设置中,HWIP_API_KEY 还是空的,填入你的密钥并保存
只把密钥粘贴到应用的输入框里,不要粘贴到聊天中或发给任何人
在 VS Code 中以 Agent 模式打开 AI 聊天
试一试
用 Hwip 告诉我你能帮我做什么,然后做一件给我看✓ 如果 VS Code 说正在使用 Hwip,或回答中出现 Hwip 的工具名称,就表示连接成功
菜单名称已于 2026年11月11日 对照 VS Code 帮助页面核实 · 你的界面可能因版本略有不同
开发者专用:终端命令和 JSON 设置
安装在电脑上
Claude Code
claude mcp add --scope user hwipit --env HWIP_API_KEY=your-value -- npx -y @hwip/mcp-serverClaude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"hwipit": {
"command": "npx",
"args": [
"-y",
"@hwip/mcp-server"
],
"env": {
"HWIP_API_KEY": "your-value"
}
}
}
}Cursor (~/.cursor/mcp.json)
{
"mcpServers": {
"hwipit": {
"command": "npx",
"args": [
"-y",
"@hwip/mcp-server"
],
"env": {
"HWIP_API_KEY": "your-value"
}
}
}
}VS Code (mcp.json)
{
"servers": {
"hwipit": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@hwip/mcp-server"
],
"env": {
"HWIP_API_KEY": "your-value"
}
}
}
}需要你填写的值
HWIP_API_KEY机密 envYour Hwip API key. Optional when ~/.hwip/config.json (from `hwip login`) holds one.
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
一览
哪些应用可以使用它
依据这个服务器的连接方式和各应用自己的文档,检查于 2026年11月10日。
在你的电脑上运行,适用于
ClaudeGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatRaycast
它能做什么
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
基础检查i
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月12日
- ✓ 通过
作者与仓库一致
注册名称已通过 GitHub 账户 hwipit 验证,该账户拥有此仓库
- ✓ 通过
仍在维护
代码最后更新于7天前
- ✓ 通过
有许可证
使用 Apache-2.0
- – 不适用
端点有响应
它在你的电脑上运行,没有互联网端点
- – 不适用
使用 OAuth 登录
在你的电脑上运行,改用本地设置
- … 尚未检查
工具描述中没有隐藏指令
它在你的电脑上运行;我们只能读取互联网端点的工具列表
讨论
提问、分享技巧或报告无法使用。按“有帮助”数量排序。
用户评价
还没有评价
与“开发者工具”中的其他服务器比较i
- 星标数多于此分类中其他 5813 个服务器的 0%
- 发布到注册中心的时间比此分类中其他 5813 个服务器的 73% 更新
- 基础检查结果等于或优于此分类中其他 5813 个服务器的 100%
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
常见问题
Hwip 安全吗?
它在 3 项适用的基础检查中通过了 3 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
它需要哪些密钥或代码?
你需要填写:HWIP_API_KEY
它在我的电脑上运行还是在云端?
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
它还在维护吗?
GitHub 仓库最后更新于7天前,最新版本(0.1.7)于7天前进入注册中心。
哪些应用可以使用它?
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js。
有什么可以替代它?
同一分类中有:REA, GitHub, Serena MCP: the IDE for your agent
同类别的其他选择
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:↓ 每周下载量i★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
GitHub
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Serena MCP: the IDE for your agent
A powerful toolkit for coding, providing semantic retrieval and editing capabilities.
作者的 README
打开 README
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
@hwip/mcp-server
Your agent calls `hwip_ask`; the question lands on your phone as buttons + a text field; your reply comes back into the same tool call and the agent keeps going.
Hwip's MCP server is the agent side of that round trip — plus one-way notifications, clipboard, files, and channel broadcasts, all over the Model Context Protocol. Works with Claude Code, Cursor, Windsurf, Gemini CLI, and any MCP client.
Your agent calls hwip_ask → the question hits your phone → you tap Deploy → the call returns and the agent ships.
Part of the Hwip toolchain: @hwip/cli (installer, push CLI, tmux remote control) · hwipit/plugin (Claude Code plugin bundling this server) · the Hwip app on your phone.
New here? docs.hwip.app walks the whole setup — one command on your machine, the app on your phone, and a restart. The reference below assumes that is already done.
Setup
The easiest way to set up for all agents at once:
npm install -g @hwip/cli
hwip install
Needs Node 18.17 or later. On Node 22 or later hwip_ask hears the answer over a WebSocket the moment it is given; on older Node it polls, and the server says so on stderr at start.
This saves credentials to ~/.hwip/config.json and configures your agents automatically. The MCP server reads from this file — no env vars needed. Install globally so hwip cc (phone-driven sessions) works and hooks skip an npx cold-start; npx @hwip/cli install is a notifications-only alternative.
Claude Code (manual)
Install the server once, so each session starts the hwip-mcp binary directly instead of resolving the package through npx first:
npm install -g @hwip/mcp-server
Add to ~/.claude/settings.json:
{
"mcpServers": { "hwip": { "command": "hwip-mcp" } } }
Without a global install, "command": "npx", "args": ["-y", "@hwip/mcp-server"] works too; it only starts slower, because every session resolves the package first.
No env block needed: credentials come from ~/.hwip/config.json (written by hwip install). Add env vars only to override the file — e.g. a second account:
"env": { "HWIP_API_KEY": "ak_other_account" }
Cursor / Other MCP Clients
{
"command": "hwip-mcp" }
(after npm install -g @hwip/mcp-server, or "command": "npx", "args": ["-y", "@hwip/mcp-server"] without it.)
Environment Variables
| Variable | Required | Description |
|---|---|---|
HWIP_API_KEY | Yes* | API key from Settings > API Keys. One that cannot be sent as a header — a line break or another control character inside it, a character no key has — stops the server at start, with a message that says where the key is set and nothing of the key. So does an apiKey in ~/.hwip/config.json that is not text |
HWIP_HOOK_ID | No | Hook ID (optional — only needed for hwip_ask) |
HWIP_DEVICE_ID | No | Default target device for hwip_notify, hwip_clipboard and hwip_file (each call's targetDeviceId wins). Omit to send to all devices. hwip_ask does not use it |
HWIP_BASE_URL | No | API base URL (default: https://api.hwip.app/v1). A base URL that answers with a redirect is refused (REDIRECT_REFUSED): requests that carry your API key never follow one |
HWIP_WS_URL | No | Deprecated. WebSocket endpoint for the hook-response fast path. wsUrl in ~/.hwip/config.json wins over it and is where the value belongs; this is read only when the file has none, so a machine that predates the config field keeps working. It will stop being read |
HWIP_DISABLE_SESSION_CACHE | No | Set to 1/true to skip writing the session-id handoff file under ~/.cache/hwip/. Useful for read-only filesystems, ephemeral CI runners, or sandboxed envs that audit filesystem writes. The plugin's stop hook still works without it (transcript-path UUID extraction is the primary path; the cache is a fallback for older Claude Code versions). |
HWIP_AUTONAME | No | Set to 1/true to offer hwip_session_title, so the agent names its own session. hwip install sets it for agents with no session title of their own |
HWIP_SESSION_ID | No | Override the session id attached to pushes (grouping in the app). Auto-detected from the newest Claude Code transcript when unset |
\* If env vars are not set, the server reads from ~/.hwip/config.json (created by hwip install or hwip login). Unresolved ${...} interpolations are also treated as unset.
~/.hwip/config.json
| Key | Same as | Notes |
|---|---|---|
apiKey | HWIP_API_KEY | The environment variable wins |
baseUrl | HWIP_BASE_URL | The environment variable wins |
wsUrl | HWIP_WS_URL (deprecated) | The file wins. With neither, the prod API (https://api.hwip.app/v1) gets wss://ws.hwip.app, the cli listener's rule; another API base gets no socket, and hwip_ask polls |
hookId | HWIP_HOOK_ID | The environment variable wins |
deviceId | HWIP_DEVICE_ID | The environment variable wins |
A file that is not used because it is not valid JSON or UTF-8 text, or cannot be read, is named on stderr ("…so it is being ignored") even when HWIP_API_KEY is set: its hookId and deviceId are dropped with it.
Without an API key the server stops at start and says why: the file does not exist, it is not valid JSON, it is not valid UTF-8 text (such a file is not used at all, as in the cli), it has no apiKey, or it was ignored (below).
The file holds the key and says where the key is sent, so the server checks it before reading, by the same rule as the cli:
- Another user owns it, or anyone can write it (mode
002): the file is ignored —HWIP_API_KEYstill works — and a line on stderr says so. Runchmod 600 ~/.hwip/config.json. - The group can read or write it, or others can read it: used, with a warning. The server only reads the file;
hwip loginis what narrows it to0600. - A symlinked file (a dotfiles checkout) is judged by what it points at.
- A file that is not valid JSON, or cannot be read, may hold the
baseUrlyour key belongs to (staging, self-hosted), so a key fromHWIP_API_KEYis not sent to the default API in its place: the server stops at start, names the file, and goes ahead onceHWIP_BASE_URLsays where the key goes. (A file ignored for its mode is not trusted for a base URL either, and the default stands.) - A key from the file does not follow an address from the environment. The key in
~/.hwip/config.jsonbelongs to the addresses the file says (baseUrl, else the default API). IfHWIP_BASE_URLnames another origin, the server stops at start, naming both origins and no more, and goes ahead onceHWIP_API_KEYis set too (a key you gave with the address) or the variable is unset or on the same origin. The deprecatedHWIP_WS_URLis held to the same rule — with the file's key it is used only for the default socket's origin, otherwise it is skipped with a line on stderr (hwip_askpolls) — and puttingwsUrlin the file is the way to name another socket. wsUrlhas to be aws://orwss://URL without a space or#fragment; one that is not is ignored with a warning (the default socket, or polling).ws://andhttp://to a host other than this machine work, with a warning that the key travels in the clear.
Limits on what the server reads
A reply from the API is read only up to 8 MiB (an error body, 64 KiB), counted on the bytes that arrive rather than on Content-Length; a file download, up to 1 GiB. Past that the call fails with RESPONSE_TOO_LARGE or FILE_TOO_LARGE. The message the API words for an error reaches the agent as one line of at most 300 characters, control characters turned into spaces, and an error code that is not made of letters, digits and _.:- becomes UNKNOWN_ERROR.
Tools
Push titles are automatically prefixed with the project directory name — myapp · Build complete — so the phone feed stays scannable when several sessions push at once.
hwip_notify
Send a one-way push notification. An optional url opens on the device; the push stays a notification (a long body goes as a response.md file push instead).
title: "Build complete"
body: "All 42 tests passed" url: "https://github.com/org/repo/actions/runs/123" (optional) priority: "low" | "normal" | "high" | "urgent" targetDeviceId: "dev_..." (optional, overrides HWIP_DEVICE_ID)
hwip_clipboard
Copy text to the user's device clipboard. At most 96 KiB, measured as the server does (the text as JSON, UTF-8); longer text is refused with BODY_TOO_LONG before it is sent — use hwip_file with content. Not end-to-end encrypted (see Encryption): do not use it for secrets (keys, tokens, passwords); use hwip_notify or hwip_file for those.
text: "npm install @hwip/mcp-server"
targetDeviceId: "dev_..." (optional)
hwip_list
List recent push notifications.
limit: 5 (1-20, default: 5)
type: "note" (optional filter: note, link, file, clipboard, hook)
Returns: { pushes: [...], total: 5, hasMore: true }. A body is cut to 100 characters. An end-to-end encrypted push shows encrypted: true and no title or body — only the user's devices can open it.
hwip_dismiss
Mark a specific push as read.
pushId: "push_01HX..."
hwip_dismiss_all
Clear all notifications at once. No parameters.
Returns: { dismissed: 12, badge: 0 }
hwip_devices · hwip_channels
Read-only lookups for the ids other tools take: hwip_devices returns { devices } (a deviceId is hwip_notify's targetDeviceId), hwip_channels returns { channels } (a channelId for hwip_broadcast). The same lists are the hwip://devices and hwip://channels resources, for clients that read resources.
hwip_broadcast
Send a notification to all subscribers of a channel.
channelId: "ch_..."
title: "Deploy complete" body: "v2.1.0 is live" url: "https://..." (optional) priority: "normal"
hwip_file
Send files to the user's device. One of filePath (a file already on disk), filePaths (several files on disk) or content (text you generated) is required.
filePath: "/abs/path/screenshot.png" (images, PDFs, logs — anything on disk)
filePaths: ["/abs/a.png", "/abs/b.png"] (up to 20, sent together; not with filePath or content) content: "{\"status\": \"ok\"}" (text only; requires fileName) fileName: "report.json" (required with content; defaults to basename of filePath) title: "Build Report" (optional, defaults to fileName, or "N files") targetDeviceId: "dev_..." (optional)
Images are delivered with their real mime type and render inline on the device. Never base64 a binary file into content — pass filePath and the server reads the bytes off disk.
Several files asked for at once (screenshots of one change, a set of logs) go in one call with filePaths: they arrive as one message, five to a push (the server's li