@multiplayer-app/cli
Advanced tools
+24
-1
@@ -20,3 +20,26 @@ #!/usr/bin/env node | ||
| const binName = process.platform === 'win32' ? 'multiplayer.exe' : 'multiplayer' | ||
| const rootDir = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..') | ||
| // In a source checkout (src/index.tsx present), prefer running via bun so that | ||
| // locally-added commands work without a full binary rebuild. | ||
| const sourceEntry = path.join(rootDir, 'src', 'index.tsx') | ||
| if (existsSync(sourceEntry)) { | ||
| const bunCandidates = [ | ||
| path.join(rootDir, 'node_modules', '.bin', 'bun'), | ||
| '/opt/homebrew/bin/bun', | ||
| '/usr/local/bin/bun', | ||
| 'bun', | ||
| ] | ||
| for (const bunBin of bunCandidates) { | ||
| if (!existsSync(bunBin) && bunBin !== 'bun') continue | ||
| try { | ||
| execFileSync(bunBin, [sourceEntry, ...process.argv.slice(2)], { stdio: 'inherit' }) | ||
| process.exit(0) | ||
| } catch (err) { | ||
| if (err.status !== undefined) process.exit(err.status) | ||
| // bun not found at this path, try next | ||
| } | ||
| } | ||
| } | ||
| // Walk up from this file looking for the binary in node_modules | ||
@@ -36,3 +59,3 @@ function findBinary() { | ||
| // Fallback: sibling dist/ for local dev | ||
| const devBin = path.join(path.dirname(fileURLToPath(import.meta.url)), '..', 'dist', `${platform}-${arch}`, 'bin', binName) | ||
| const devBin = path.join(rootDir, 'dist', `${platform}-${arch}`, 'bin', binName) | ||
| if (existsSync(devBin)) return devBin | ||
@@ -39,0 +62,0 @@ |
+12
-10
| { | ||
| "name": "@multiplayer-app/cli", | ||
| "version": "2.0.31", | ||
| "version": "2.0.35", | ||
| "description": "Multiplayer CLI", | ||
@@ -17,8 +17,8 @@ "type": "module", | ||
| "optionalDependencies": { | ||
| "@multiplayer-app/cli-darwin-arm64": "2.0.31", | ||
| "@multiplayer-app/cli-darwin-x64": "2.0.31", | ||
| "@multiplayer-app/cli-linux-x64": "2.0.31", | ||
| "@multiplayer-app/cli-linux-arm64": "2.0.31", | ||
| "@multiplayer-app/cli-windows-x64": "2.0.31", | ||
| "@multiplayer-app/cli-windows-arm64": "2.0.31" | ||
| "@multiplayer-app/cli-darwin-arm64": "2.0.35", | ||
| "@multiplayer-app/cli-darwin-x64": "2.0.35", | ||
| "@multiplayer-app/cli-linux-arm64": "2.0.35", | ||
| "@multiplayer-app/cli-linux-x64": "2.0.35", | ||
| "@multiplayer-app/cli-windows-arm64": "2.0.35", | ||
| "@multiplayer-app/cli-windows-x64": "2.0.35" | ||
| }, | ||
@@ -33,9 +33,10 @@ "license": "MIT", | ||
| "@anthropic-ai/sdk": "^0.78.0", | ||
| "@modelcontextprotocol/sdk": "^1.29.0", | ||
| "@opentui/core": "0.1.96", | ||
| "@opentui/core-darwin-arm64": "0.1.96", | ||
| "@opentui/core-darwin-x64": "0.1.96", | ||
| "@opentui/core-linux-arm64": "0.1.96", | ||
| "@opentui/core-linux-x64": "0.1.96", | ||
| "@opentui/core-linux-arm64": "0.1.96", | ||
| "@opentui/core-win32-arm64": "0.1.96", | ||
| "@opentui/core-win32-x64": "0.1.96", | ||
| "@opentui/core-win32-arm64": "0.1.96", | ||
| "@opentui/react": "0.1.96", | ||
@@ -58,4 +59,5 @@ "@sindresorhus/tsconfig": "^8.1.0", | ||
| "superagent": "10.3.0", | ||
| "typescript": "6.0.2" | ||
| "typescript": "6.0.2", | ||
| "zod": "^4.3.6" | ||
| } | ||
| } |
+74
-10
@@ -17,6 +17,10 @@ # @multiplayer-app/cli | ||
| |---------|-------------| | ||
| | `multiplayer` | Start the debugging agent (TUI by default) | | ||
| | `multiplayer [agent]` | Start the debugging agent (default) | | ||
| | `multiplayer releases create` | Register a release | | ||
| | `multiplayer deployments create` | Register a deployment | | ||
| | `multiplayer sourcemaps upload` | Upload sourcemap files | | ||
| | `multiplayer auth login` | Log in via browser OAuth | | ||
| | `multiplayer auth logout` | Log out and clear credentials | | ||
| | `multiplayer auth status` | Check authentication status | | ||
| | `multiplayer mcp` | Start an MCP server for AI agent integration | | ||
@@ -30,3 +34,3 @@ --- | ||
| ```sh | ||
| multiplayer [options] | ||
| multiplayer [agent] [options] | ||
| ``` | ||
@@ -75,12 +79,12 @@ | ||
| [default] | ||
| api_key = <your-api-key> | ||
| dir = /path/to/repo | ||
| model = claude-sonnet-4-6 | ||
| api_key = <your-api-key> | ||
| dir = /path/to/repo | ||
| model = claude-sonnet-4-6 | ||
| max_concurrent = 2 | ||
| [staging] | ||
| api_key = <staging-api-key> | ||
| dir = /path/to/staging-repo | ||
| model = gpt-4o | ||
| model_key = <openai-api-key> | ||
| api_key = <staging-api-key> | ||
| dir = /path/to/staging-repo | ||
| model = gpt-4o | ||
| model_key = <openai-api-key> | ||
| ``` | ||
@@ -104,2 +108,12 @@ | ||
| ## Auth | ||
| ```sh | ||
| multiplayer auth login # Log in via browser OAuth flow | ||
| multiplayer auth logout # Log out and clear stored credentials | ||
| multiplayer auth status # Check current authentication status | ||
| ``` | ||
| --- | ||
| ## Releases | ||
@@ -144,3 +158,3 @@ | ||
| | `--service <name>` | `SERVICE_NAME` | Service name | | ||
| | `--release <version>` | `VERSION` | Release version | | ||
| | `--release <version>` | `RELEASE` | Release version | | ||
| | `--environment <name>` | `ENVIRONMENT` | Environment name | | ||
@@ -182,1 +196,51 @@ | `--base-url <url>` | `BASE_URL` | API base URL (optional) | | ||
| ``` | ||
| --- | ||
| ## MCP Server | ||
| `multiplayer mcp` starts an [MCP](https://modelcontextprotocol.io) server over stdio, exposing Multiplayer operations as tools that AI agents (Claude Desktop, Claude Code, Cursor, etc.) can call directly. | ||
| ### Tools | ||
| | Tool | Description | | ||
| |------|-------------| | ||
| | `create_release` | Register a release for a service | | ||
| | `create_deployment` | Deploy a release to an environment | | ||
| | `upload_sourcemaps` | Upload `.map` files from local directories | | ||
| ### Setup | ||
| Add the server to your MCP client config. Example for Claude Desktop (`~/Library/Application Support/Claude/claude_desktop_config.json`): | ||
| ```json | ||
| { | ||
| "mcpServers": { | ||
| "multiplayer": { | ||
| "command": "multiplayer", | ||
| "args": ["mcp"], | ||
| "env": { | ||
| "MULTIPLAYER_API_KEY": "<your-api-key>" | ||
| } | ||
| } | ||
| } | ||
| } | ||
| ``` | ||
| Example for Claude Code (`~/.claude/mcp.json`): | ||
| ```json | ||
| { | ||
| "mcpServers": { | ||
| "multiplayer": { | ||
| "command": "multiplayer", | ||
| "args": ["mcp"], | ||
| "env": { | ||
| "MULTIPLAYER_API_KEY": "<your-api-key>" | ||
| } | ||
| } | ||
| } | ||
| } | ||
| ``` | ||
| Once configured, the AI can create releases, deployments, and upload sourcemaps without any shell commands or manual steps. |
12301
25.76%62
55%241
36.16%29
7.41%