Skip to main content
Glama
README.md
# Happy Server MCP

MCP (Model Context Protocol) server for managing Happy AI sessions. This allows AI agents to interact with Happy sessions programmatically.

## Features

- **List Sessions**: Query all your Happy AI sessions with their titles, working directories, and activity status
- **List Machines**: See all registered machines and their online/offline status
- **List Recent Paths**: Get recently used working directories for a machine
- **Read Messages**: Fetch recent messages from any session to see conversation history
- **Send Messages**: Trigger a session to work by sending it a message
- **Start Sessions**: Spawn new AI sessions on any connected machine
- **Archive Sessions**: Stop and archive sessions when done
- **Wait for Idle**: Wait for a session to finish processing

## Installation

```bash
npm install -g @zhigang1992/happy-server-mcp
```

## Prerequisites

You must be authenticated with Happy CLI. Run:

```bash
happy auth
```

This creates credentials at `~/.happy/access.key` that the MCP server uses.

## Usage with Claude

Add to your Claude configuration:

```json
{
  "mcpServers": {
    "happy-manager": {
      "command": "happy-server-mcp"
    }
  }
}
```

Or with npx:

```json
{
  "mcpServers": {
    "happy-manager": {
      "command": "npx",
      "args": ["@zhigang1992/happy-server-mcp"]
    }
  }
}
```

## Available Tools

### happy_list_sessions

List all Happy AI sessions. Returns session IDs, titles, paths, machines, and activity status.

**Parameters:**
| Name | Type | Required | Default | Description |
|------|------|----------|---------|-------------|
| `limit` | number | No | 50 | Maximum number of sessions to return |

**Example:**
```
Use happy_list_sessions to see all my active sessions
```

---

### happy_list_machines

List all machines registered with Happy. Returns machine IDs, hostnames, platforms, and activity status.

**Parameters:** None

**Example:**
```
Use happy_list_machines to see which machines are online
```

---

### happy_list_recent_paths

List recently used folder paths for a machine. Useful for starting sessions in familiar locations.

**Parameters:**
| Name | Type | Required | Default | Description |
|------|------|----------|---------|-------------|
| `machine_id` | string | Yes | - | The machine ID to get recent paths for |
| `limit` | number | No | 20 | Maximum number of paths to return |

**Example:**
```
Use happy_list_recent_paths with machine_id "abc123" to see recent working directories
```

---

### happy_read_messages

Read recent messages from a Happy AI session. Use this to see the conversation history.

**Parameters:**
| Name | Type | Required | Default | Description |
|------|------|----------|---------|-------------|
| `session_id` | string | Yes | - | The session ID to read messages from |
| `limit` | number | No | 20 | Maximum number of messages to return |

**Example:**
```
Use happy_read_messages with session_id "xyz789" to see what the AI has been working on
```

---

### happy_send_message

Send a message to a Happy AI session to trigger it to work. The message will be sent with bypass permissions mode.

**Parameters:**
| Name | Type | Required | Default | Description |
|------|------|----------|---------|-------------|
| `session_id` | string | Yes | - | The session ID to send the message to |
| `message` | string | Yes | - | The message text to send |
| `wait` | boolean | No | false | If true, wait for AI to finish processing before returning |

**Example:**
```
Use happy_send_message with session_id "xyz789" and message "Fix the bug in auth.ts" and wait=true
```

---

### happy_start_session

Start a new Happy AI session on a machine. Use `happy_list_machines` to find available machines first.

**Parameters:**
| Name | Type | Required | Default | Description |
|------|------|----------|---------|-------------|
| `machine_id` | string | Yes | - | The machine ID to start the session on |
| `directory` | string | Yes | - | The directory path to run the session in |
| `message` | string | No | - | Optional initial message to send to start the session working |
| `agent` | "claude" \| "codex" | No | "claude" | Agent type to use |
| `wait` | boolean | No | false | If true, wait for AI to finish processing initial message before returning |

**Example:**
```
Use happy_start_session with machine_id "abc123", directory "/home/user/project",
message "Review the codebase and suggest improvements", and wait=true
```

---

### happy_archive_session

Archive (stop) a Happy AI session. The session will be terminated and marked as inactive.

**Parameters:**
| Name | Type | Required | Default | Description |
|------|------|----------|---------|-------------|
| `session_id` | string | Yes | - | The session ID to archive |

**Example:**
```
Use happy_archive_session with session_id "xyz789" to stop the session
```

---

### happy_wait_for_idle

Wait for a Happy AI session to become idle (finish processing). Useful after sending a message to wait for AI to complete its work.

**Parameters:**
| Name | Type | Required | Default | Description |
|------|------|----------|---------|-------------|
| `session_id` | string | Yes | - | The session ID to wait for |
| `timeout_seconds` | number | No | 120 | Maximum time to wait in seconds |

**Example:**
```
Use happy_wait_for_idle with session_id "xyz789" to wait for the AI to finish
```

## Common Workflows

### Start a session and wait for completion

1. Use `happy_list_machines` to find an online machine
2. Use `happy_list_recent_paths` to find a good working directory
3. Use `happy_start_session` with `wait=true` to start and wait for the initial task

### Monitor an existing session

1. Use `happy_list_sessions` to find active sessions
2. Use `happy_read_messages` to see what the AI is working on
3. Use `happy_send_message` to give it new instructions

### Clean up old sessions

1. Use `happy_list_sessions` to see all sessions
2. Use `happy_archive_session` to stop sessions you no longer need

## Environment Variables

- `HAPPY_SERVER_URL`: Override the Happy server URL (default: `https://happy.engineering`)

## License

MIT

TDQS

A3.7/5.0

Scored across 15 tools

Disambiguation5/5

Each tool has a clearly distinct purpose with no ambiguity. Tools are grouped into session management (e.g., start, archive, list sessions), session interaction (e.g., send message, read messages, wait for idle), and Zen todo management (e.g., create, delete, update, list todos), with no overlap in functionality. The descriptions reinforce these distinct roles, making misselection unlikely.

Naming Consistency5/5

All tool names follow a consistent 'happy_verb_noun' pattern with snake_case throughout. The naming is predictable and readable, with verbs like list, start, send, read, wait, create, delete, link, set, and update applied consistently to their respective nouns (e.g., sessions, messages, todos). There are no deviations in style or convention.

Tool Count5/5

With 15 tools, the count is well-scoped for the server's purpose of managing Happy AI sessions and Zen todos. Each tool earns its place by covering essential operations such as session lifecycle, interaction, and todo CRUD, without being excessive or sparse. This number supports comprehensive functionality while remaining manageable.

Completeness5/5

The tool surface provides complete coverage for the domain of Happy AI session and Zen todo management. For sessions, it includes start, archive, list, send messages, read messages, and wait for idle, plus supporting tools for machines and environment sets. For Zen todos, it offers full CRUD operations (create, read, update, delete) and linking to sessions, with no obvious gaps or dead ends in the workflow.

Maintenance

ActivityInactive
ResponsivenessNo issues