Unofficial MCP server for Juno. Not affiliated with or endorsed by the Juno team.
Manage satellites, hosting, serverless functions, changes and more through any MCP-compatible client. Includes a built-in documentation tool to access Juno's official guides and references.
- 16 tools across 6 domains — CLI coverage for identity, config, hosting, functions, changes, and documentation
- Progress streaming — long-running operations (deploy, publish, upgrade) emit real-time progress updates via MCP progress notifications
- Automatic retry — network-dependent operations can retry on transient failures with exponential backoff
- CLI binary caching — resolves
junobinary path once, eliminating npx overhead on every call - Smart error handling — all tools propagate
isErrorbased on CLI exit codes, with clean error messages - Config file writing —
juno_config_initcan write config files directly to disk - Docs caching — documentation responses cached for 1 hour to reduce latency
Choose your AI coding agent below for specific setup instructions.
CLI (recommended):
claude mcp add junobuild npx -y junobuild-mcp-serverConfig file:
| Scope | Location |
|---|---|
| User | ~/.claude/mcp.json |
| Project | .mcp.json |
{
"mcpServers": {
"junobuild": {
"command": "npx",
"args": ["-y", "junobuild-mcp-server"]
}
}
}CLI:
codex mcp add junobuild -- npx -y junobuild-mcp-serverConfig file:
| Scope | Location |
|---|---|
| Global | ~/.codex/config.toml |
| Project | .codex/config.toml |
[mcp_servers.junobuild]
command = "npx"
args = ["-y", "junobuild-mcp-server"]Config file:
| Scope | Location |
|---|---|
| User | ~/.opencode/opencode.json (Linux/macOS) |
| Workspace | opencode.json (project root) |
{
"mcpServers": {
"junobuild": {
"command": "npx",
"args": ["-y", "junobuild-mcp-server"]
}
}
}CLI:
droid mcp add junobuild npx -y junobuild-mcp-serverConfig file:
| Scope | Location |
|---|---|
| User | ~/.factory/mcp.json |
| Project | .factory/mcp.json |
{
"mcpServers": {
"junobuild": {
"type": "stdio",
"command": "npx",
"args": ["-y", "junobuild-mcp-server"]
}
}
}Uses a Powers system with custom configuration.
Config file:
| Scope | Location |
|---|---|
| Workspace | .antigravity/powers/ or project config |
Add the MCP server configuration to your Power's mcp.json:
{
"mcpServers": {
"junobuild": {
"command": "npx",
"args": ["-y", "junobuild-mcp-server"]
}
}
}Note: See Antigravity MCP documentation for full Power setup.
Config file:
| Scope | Location |
|---|---|
| User | ~/.cursor/mcp.json |
| Project | .cursor/mcp.json |
{
"mcpServers": {
"junobuild": {
"command": "npx",
"args": ["-y", "junobuild-mcp-server"]
}
}
}CLI:
amp mcp add junobuild -- npx -y junobuild-mcp-serverConfig file:
| Scope | Location |
|---|---|
| User | ~/.config/amp/settings.json (macOS/Linux) |
| Workspace | .amp/settings.json |
{
"amp.mcpServers": {
"junobuild": {
"command": "npx",
"args": ["-y", "junobuild-mcp-server"]
}
}
}Note: Workspace MCP servers require approval via amp mcp approve <server-name>.
Config file:
| Scope | Location |
|---|---|
| User | ~/.config/Code/User/mcp.json (Linux) |
| Workspace | .vscode/mcp.json |
{
"servers": {
"junobuild": {
"type": "stdio",
"command": "npx",
"args": ["-y", "junobuild-mcp-server"]
}
}
}Config file:
| Scope | Location |
|---|---|
| User | ~/.codeium/windsurf/mcp_config.json |
{
"mcpServers": {
"junobuild": {
"command": "npx",
"args": ["-y", "junobuild-mcp-server"]
}
}
}Config file:
| Scope | Location |
|---|---|
| User | ~/.kiro/settings/mcp.json |
| Workspace | .kiro/settings/mcp.json |
{
"mcpServers": {
"junobuild": {
"command": "npx",
"args": ["-y", "junobuild-mcp-server"]
}
}
}Config file:
| Scope | Location |
|---|---|
| User | ~/.config/Kilo Code/User/mcp.json |
| Project | .vscode/mcp.json |
{
"servers": {
"junobuild": {
"command": "npx",
"args": ["-y", "junobuild-mcp-server"]
}
}
}Config file:
| Scope | Location |
|---|---|
| User | cline_mcp_settings.json (in config dir) |
{
"mcpServers": {
"junobuild": {
"command": "npx",
"args": ["-y", "junobuild-mcp-server"]
}
}
}The server wraps @junobuild/cli, which must be installed and authenticated:
npm i -g @junobuild/cli
juno loginFor non-interactive environments (CI, headless), set the JUNO_TOKEN environment variable or use the --mode and --profile flags available on every tool.
For non-interactive environments (CI, headless), authenticate using environment variables:
export JUNO_TOKEN="your-juno-token"Note: The juno_create_project tool does NOT use the interactive create-juno CLI. Instead it:
- Scaffolds a Vite project (React, Next.js, Svelte, Angular, or Vue)
- Creates a
juno.config.tsfile
This allows fully non-interactive project creation.
The juno_docs tool fetches documentation directly from the GitHub repo, with responses cached for 1 hour:
juno_docs({ topic: "build_datastore" }) → Datastore guide
juno_docs({ topic: "build_authentication" }) → Authentication overview
juno_docs({ topic: "reference_cli" }) → CLI reference
juno_docs({ topic: "guides_local_development" }) → Local development guide
Topic keys use underscore naming matching folder hierarchy: build_<feature>, reference_cli_<command>, guides_<framework>. Full list: see TODO.md for all 159 topics.
| Domain | Tools |
|---|---|
| Identity | juno_version, juno_run, juno_status |
| Config | juno_config_init, juno_config_apply, juno_create_project |
| Hosting | juno_hosting_deploy, juno_hosting_clear, juno_hosting_prune |
| Functions | juno_functions_build, juno_functions_eject, juno_functions_publish, juno_functions_upgrade |
| Changes | juno_changes_list, juno_changes_apply, juno_changes_reject |
| Docs | juno_docs |
Several tools support optional parameters for enhanced reliability and UX:
| Parameter | Type | Tools | Description |
|---|---|---|---|
retry |
boolean |
deploy, publish, upgrade | Automatically retry on transient network failures (up to 3 attempts with exponential backoff: 1s → 2s → 4s) |
progress |
boolean |
deploy, publish, upgrade | Stream real-time progress updates during long-running operations (build status + upload batch progress) |
writeFile |
boolean |
juno_config_init |
Write the config file directly to disk instead of returning text for preview |
- Node.js >= 18
- @junobuild/cli — installed and authenticated (not needed for
juno_versionorjuno_docs) - Juno project with
juno.config.ts/js/json(for config/hosting operations)
npm run build # Compile TypeScript to dist/
npm run dev # Watch mode (development)
npm run start # Run compiled dist/index.js
npm run clean # Remove dist/npm run changeset # Create a changeset (version bump + changelog entry)
npm run version # Apply changesets → bump version
npm run release # Publish to npmMIT