@hotwired-sh/hotwired-mcp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 hotwired-sh
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,147 @@
1
+ # hotwired-mcp
2
+
3
+ ![Hotwired](hotwired-sh.png)
4
+
5
+ MCP (Model Context Protocol) server for [Hotwired](https://hotwired.sh) multi-agent workflow orchestration.
6
+
7
+ ## Why Open Source?
8
+
9
+ This MCP server runs on your machine. We open source it so you can:
10
+
11
+ - **Audit** exactly what code runs on your machine
12
+ - **Verify** there are no external network calls
13
+ - **Trust** that there's no hidden behavior
14
+ - **Build from source** if you prefer
15
+
16
+ ## Hotwired.sh Architecture
17
+
18
+ **Everything runs locally on your machine.** There are no external service dependencies.
19
+
20
+ ```mermaid
21
+ flowchart TB
22
+ subgraph agents["AI Coding Agents"]
23
+ claude["Claude Code"] ~~~ gemini["Gemini CLI"] ~~~ other["Other Agents"]
24
+ end
25
+
26
+ subgraph mcp["hotwired-mcp"]
27
+ tools["MCP Tools"] --> ipc["IPC Client"]
28
+ end
29
+
30
+ subgraph desktop["Hotwired Desktop App"]
31
+ socket["Unix Socket<br/>~/.hotwired/hotwired.sock"] <--> core["Hotwired Core"]
32
+ end
33
+
34
+ agents -->|"spawns"| mcp
35
+ ipc <-->|"local only"| socket
36
+ ```
37
+
38
+ ### How it works
39
+
40
+ 1. **Hotwired Desktop App** runs locally and creates a Unix socket at `~/.hotwired/hotwired.sock`
41
+ 2. **AI agents** (Claude Code, Gemini, etc.) run `hotwired-mcp` as their MCP server
42
+ 3. **hotwired-mcp** communicates with the desktop app via the local Unix socket
43
+ 4. **No external network calls** - all communication stays on your machine
44
+
45
+ The only external connection the Hotwired Desktop App makes is for **authentication**. All workflow orchestration, message passing, and coordination happens entirely locally.
46
+
47
+ ## Installation
48
+
49
+ ### For Claude Code Users
50
+
51
+ **Just install the [Hotwired Claude Plugin](https://github.com/hotwired-sh/claude-plugin)** - it handles everything automatically:
52
+
53
+ ```bash
54
+ claude plugin install hotwired
55
+ ```
56
+
57
+ The plugin runs `npx @hotwired-sh/hotwired-mcp@latest` under the hood, so you'll always have the latest version. No manual installation needed.
58
+
59
+ ### For Other MCP-Compatible Agents
60
+
61
+ Add to your MCP configuration:
62
+
63
+ ```json
64
+ {
65
+ "mcpServers": {
66
+ "hotwired": {
67
+ "command": "npx",
68
+ "args": ["@hotwired-sh/hotwired-mcp@latest"]
69
+ }
70
+ }
71
+ }
72
+ ```
73
+
74
+ ### Building from Source
75
+
76
+ If you prefer to audit and build the code yourself:
77
+
78
+ ```bash
79
+ cargo install --git https://github.com/hotwired-sh/hotwired-mcp
80
+ ```
81
+
82
+ ## Prerequisites
83
+
84
+ - [Hotwired Desktop App](https://hotwired.sh) - Must be running
85
+ - [Zellij](https://zellij.dev) - Terminal multiplexer for session management
86
+
87
+ ## Available Tools
88
+
89
+ | Tool | Description |
90
+ |------|-------------|
91
+ | `get_protocol` | Fetch workflow protocol and role instructions |
92
+ | `get_run_status` | Check current run status |
93
+ | `report_status` | Update your working state |
94
+ | `send_message` | Send message to other participants |
95
+ | `request_input` | Ask human for input |
96
+ | `report_impediment` | Signal you're blocked |
97
+ | `handoff` | Hand work to another agent |
98
+ | `task_complete` | Mark a task as complete |
99
+
100
+ ## Security
101
+
102
+ ### Why Unix Sockets (Not HTTP/localhost)
103
+
104
+ We deliberately use **Unix sockets** instead of HTTP on localhost. This is a critical security design choice.
105
+
106
+ Many MCP tools have been vulnerable to **DNS rebinding attacks** and **0.0.0.0 bypass exploits** because they expose HTTP servers on localhost. These vulnerabilities allow malicious websites to:
107
+
108
+ - Send requests to localhost services via DNS rebinding
109
+ - Bypass browser same-origin policy through the 0.0.0.0 loophole
110
+ - Achieve remote code execution with no user interaction
111
+
112
+ **Unix sockets are immune to these attacks:**
113
+
114
+ - ❌ No TCP/HTTP listener - browsers cannot connect
115
+ - ❌ No DNS rebinding possible - not a network protocol
116
+ - ❌ No 0.0.0.0 bypass - sockets are filesystem-based
117
+ - ✅ Protected by filesystem permissions
118
+ - ✅ Only local processes can connect
119
+
120
+ ### What This MCP Server Does NOT Do
121
+
122
+ - **Does NOT open any network ports** - no HTTP, no TCP, no localhost
123
+ - **Does NOT make any external network requests**
124
+ - **Does NOT read or modify files** outside its scope
125
+ - Connects **only** to the local Unix socket (`~/.hotwired/hotwired.sock`)
126
+ - Source code is fully auditable
127
+
128
+ ## Development
129
+
130
+ ```bash
131
+ # Build
132
+ cargo build --release
133
+
134
+ # Test
135
+ cargo test
136
+
137
+ # Run locally
138
+ cargo run
139
+ ```
140
+
141
+ ## License
142
+
143
+ MIT - See [LICENSE](LICENSE)
144
+
145
+ ## Learn More
146
+
147
+ Visit [hotwired.sh](https://hotwired.sh) for documentation, tutorials, and more information about multi-agent workflow orchestration.
@@ -0,0 +1,72 @@
1
+ #!/usr/bin/env node
2
+
3
+ const { execFileSync } = require("child_process");
4
+ const path = require("path");
5
+ const fs = require("fs");
6
+
7
+ const PLATFORMS = {
8
+ "darwin-arm64": "@hotwired-sh/mcp-darwin-arm64",
9
+ "darwin-x64": "@hotwired-sh/mcp-darwin-x64",
10
+ "linux-x64": "@hotwired-sh/mcp-linux-x64",
11
+ "linux-arm64": "@hotwired-sh/mcp-linux-arm64",
12
+ "win32-x64": "@hotwired-sh/mcp-win32-x64",
13
+ };
14
+
15
+ function getBinaryPath() {
16
+ const platformKey = `${process.platform}-${process.arch}`;
17
+ const packageName = PLATFORMS[platformKey];
18
+
19
+ if (!packageName) {
20
+ console.error(`Unsupported platform: ${platformKey}`);
21
+ console.error(`Supported platforms: ${Object.keys(PLATFORMS).join(", ")}`);
22
+ process.exit(1);
23
+ }
24
+
25
+ // Try to find the binary in node_modules
26
+ const binaryName = process.platform === "win32" ? "hotwired-mcp.exe" : "hotwired-mcp";
27
+
28
+ // Check in the platform package
29
+ const paths = [
30
+ // When installed as a dependency
31
+ path.join(__dirname, "..", "node_modules", packageName, "bin", binaryName),
32
+ // When installed globally or via npx
33
+ path.join(__dirname, "..", "node_modules", packageName, "bin", binaryName),
34
+ // Relative to this package
35
+ require.resolve(`${packageName}/bin/${binaryName}`),
36
+ ];
37
+
38
+ for (const binPath of paths) {
39
+ try {
40
+ if (fs.existsSync(binPath)) {
41
+ return binPath;
42
+ }
43
+ } catch {}
44
+ }
45
+
46
+ // Try require.resolve as last resort
47
+ try {
48
+ const pkgPath = require.resolve(`${packageName}/package.json`);
49
+ const pkgDir = path.dirname(pkgPath);
50
+ const binPath = path.join(pkgDir, "bin", binaryName);
51
+ if (fs.existsSync(binPath)) {
52
+ return binPath;
53
+ }
54
+ } catch {}
55
+
56
+ console.error(`Could not find binary for platform: ${platformKey}`);
57
+ console.error(`Expected package: ${packageName}`);
58
+ process.exit(1);
59
+ }
60
+
61
+ const binaryPath = getBinaryPath();
62
+
63
+ try {
64
+ execFileSync(binaryPath, process.argv.slice(2), {
65
+ stdio: "inherit",
66
+ });
67
+ } catch (error) {
68
+ if (error.status !== null) {
69
+ process.exit(error.status);
70
+ }
71
+ throw error;
72
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "@hotwired-sh/mcp-darwin-arm64",
3
+ "version": "1.0.0",
4
+ "description": "hotwired-mcp binary for macOS ARM64",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/hotwired-sh/hotwired-mcp.git"
9
+ },
10
+ "os": [
11
+ "darwin"
12
+ ],
13
+ "cpu": [
14
+ "arm64"
15
+ ],
16
+ "files": [
17
+ "bin/hotwired-mcp"
18
+ ]
19
+ }
Binary file
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "@hotwired-sh/mcp-darwin-x64",
3
+ "version": "1.0.0",
4
+ "description": "hotwired-mcp binary for macOS x64",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/hotwired-sh/hotwired-mcp.git"
9
+ },
10
+ "os": [
11
+ "darwin"
12
+ ],
13
+ "cpu": [
14
+ "x64"
15
+ ],
16
+ "files": [
17
+ "bin/hotwired-mcp"
18
+ ]
19
+ }
Binary file
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "@hotwired-sh/mcp-linux-arm64",
3
+ "version": "1.0.0",
4
+ "description": "hotwired-mcp binary for Linux ARM64",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/hotwired-sh/hotwired-mcp.git"
9
+ },
10
+ "os": [
11
+ "linux"
12
+ ],
13
+ "cpu": [
14
+ "arm64"
15
+ ],
16
+ "files": [
17
+ "bin/hotwired-mcp"
18
+ ]
19
+ }
Binary file
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "@hotwired-sh/mcp-linux-x64",
3
+ "version": "1.0.0",
4
+ "description": "hotwired-mcp binary for Linux x64",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/hotwired-sh/hotwired-mcp.git"
9
+ },
10
+ "os": [
11
+ "linux"
12
+ ],
13
+ "cpu": [
14
+ "x64"
15
+ ],
16
+ "files": [
17
+ "bin/hotwired-mcp"
18
+ ]
19
+ }
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@hotwired-sh/hotwired-mcp",
3
+ "version": "1.0.0",
4
+ "description": "MCP server for Hotwired multi-agent workflow orchestration",
5
+ "author": "Hotwired <hello@hotwired.sh>",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/hotwired-sh/hotwired-mcp.git"
10
+ },
11
+ "homepage": "https://hotwired.sh",
12
+ "bugs": {
13
+ "url": "https://github.com/hotwired-sh/hotwired-mcp/issues"
14
+ },
15
+ "keywords": [
16
+ "mcp",
17
+ "model-context-protocol",
18
+ "ai",
19
+ "claude",
20
+ "hotwired",
21
+ "multi-agent",
22
+ "workflow"
23
+ ],
24
+ "bin": {
25
+ "hotwired-mcp": "bin/hotwired-mcp"
26
+ },
27
+ "files": [
28
+ "bin",
29
+ "npm"
30
+ ],
31
+ "scripts": {
32
+ "postinstall": "node scripts/postinstall.js",
33
+ "test": "cargo test",
34
+ "prepare": "husky"
35
+ },
36
+ "optionalDependencies": {
37
+ "@hotwired-sh/mcp-darwin-arm64": "1.0.0",
38
+ "@hotwired-sh/mcp-darwin-x64": "1.0.0",
39
+ "@hotwired-sh/mcp-linux-x64": "1.0.0",
40
+ "@hotwired-sh/mcp-linux-arm64": "1.0.0"
41
+ },
42
+ "devDependencies": {
43
+ "@commitlint/cli": "^19.0.0",
44
+ "@commitlint/config-conventional": "^19.0.0",
45
+ "@semantic-release/changelog": "^6.0.3",
46
+ "@semantic-release/exec": "^6.0.3",
47
+ "@semantic-release/git": "^10.0.1",
48
+ "conventional-changelog-conventionalcommits": "^7.0.2",
49
+ "husky": "^9.0.0",
50
+ "semantic-release": "^24.0.0"
51
+ },
52
+ "engines": {
53
+ "node": ">=18"
54
+ }
55
+ }