Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,24 @@ jobs:

- name: Run validate
run: task validate

cross-platform:
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4

- uses: actions/setup-go@v5
with:
go-version-file: go.mod

- name: Build
run: go build ./...

- name: Vet
run: go vet ./...

- name: Test
run: go test ./...
49 changes: 49 additions & 0 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: Deploy docs

on:
push:
branches: [main]
paths:
- 'docs/**'
- 'Taskfile.yml'
- '.github/workflows/docs.yml'
workflow_dispatch:

permissions:
contents: read
pages: write
id-token: write

concurrency:
group: pages
cancel-in-progress: false

jobs:
docs:
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deploy.outputs.page_url }}
steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: '20'

- uses: actions/setup-go@v5
with:
go-version-file: go.mod

- name: Install task
run: go install github.com/go-task/task/v3/cmd/task@latest

- name: Build docs
run: task docs-build

- uses: actions/upload-pages-artifact@v3
with:
path: site/

- uses: actions/deploy-pages@v4
id: deploy
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Binaries
bin/
dist/
site/
*.exe
*.exe~
*.dll
Expand Down
1 change: 1 addition & 0 deletions .goreleaser.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ builds:
goos:
- darwin
- linux
- windows
goarch:
- amd64
- arm64
Expand Down
11 changes: 6 additions & 5 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@ AI agent context for the mcp-sim Go project (mobile emulator lifecycle MCP serve

## Project Overview

mcp-sim is an MCP server for managing iOS Simulator and Android Emulator lifecycle
on a remote macOS host. Built-in adapters for iOS (xcrun simctl), Android (emulator + adb),
and agent-device controller.
mcp-sim is an MCP server for managing iOS Simulator and Android Emulator lifecycle,
runnable on macOS, Linux, or Windows. Built-in adapters for iOS (xcrun simctl, macOS-only —
requires Xcode), Android (emulator + adb, cross-platform), and agent-device controller
(cross-platform).

## Backlog

Expand All @@ -16,7 +17,7 @@ Issues #1–#21 cover M1 milestone tasks. M2 hardening tracked separately.

## Current release

v0.1.1patch release with bug fixes. Branch `main` holds released commits. Use `develop` for
v0.2.0cross-platform support (Windows/Linux), native service install, hosted doc site. Branch `main` holds released commits. Use `develop` for
new work. Versions live in `internal/version/version.go` and are injected at
build time via `-ldflags "-X .../internal/version.Version=..."`.

Expand All @@ -26,7 +27,7 @@ build time via `-ldflags "-X .../internal/version.Version=..."`.
|----------|---------|
| `docs/architecture.md` | Adapter model + separation of concerns |
| `docs/tailscale.md` | Network deployment over Tailscale |
| `docs/launchd.md` | macOS service management |
| `docs/service.md` | Running mcp-sim as a native OS service (launchd/systemd/Windows Service) |
| `docs/adding-platform.md` | Implementing new Platform adapters |
| `CONTRIBUTING.md` | PR process + load-bearing separation rule |
| `pkg/contract/platform.go` | Platform interface |
Expand Down
23 changes: 22 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,26 @@ Nothing yet.
### Security
-->

## [0.2.0] - 2026-07-05

### Added

- `mcp-sim service` subcommand (install/uninstall/start/stop/restart/status/run) via `github.com/kardianos/service` — installs mcp-sim as a native background service (launchd/systemd/Windows Service), with a `--user` mode for non-root installs on macOS/Linux.
- Windows binaries in GoReleaser cross-compilation matrix (darwin/linux/windows × amd64/arm64).
- Hosted doc site at https://espetro.github.io/mcp-sim/, built from `docs/` via docmd and deployed to GitHub Pages on push to `main`. `task docs` / `task docs-build` for local preview/build.

### Changed

- Android adapter and agent-device controller now run correctly on Windows and Linux (previously darwin/linux-only): `setProcAttr` split into `procattr_unix.go`/`procattr_windows.go` (Setpgid vs `CREATE_NEW_PROCESS_GROUP`); Android SDK home-dir probing covers macOS/Linux/Windows defaults.
- `agent-device` controller stop now uses `cmd.Process.Kill()` instead of Unix-only `pkill -f`.
- Default config path now resolved via `os.UserHomeDir()` instead of raw `$HOME` lookup, fixing Windows.
- CI (`ci.yml`) now runs a cross-platform matrix (ubuntu/windows/macos) for build+vet+test.
- `docs/launchd.md` renamed to `docs/service.md`; README/AGENTS.md wording corrected — only iOS Simulator tools require macOS, the rest of the server runs on all three OSes.

### Removed

- `docs/releases/` — release notes duplicated root `CHANGELOG.md`; dropped in favor of the single changelog.

## [0.1.1] - 2026-07-05

### Fixed
Expand Down Expand Up @@ -59,6 +79,7 @@ Nothing yet.
- Cross-compiled releases via GoReleaser (darwin/linux/windows × amd64/arm64)
- Homebrew tap `espetro/homebrew-mcp-sim` (when published)

[Unreleased]: https://github.com/espetro/mcp-sim/compare/v0.1.1...HEAD
[Unreleased]: https://github.com/espetro/mcp-sim/compare/v0.2.0...HEAD
[0.2.0]: https://github.com/espetro/mcp-sim/compare/v0.1.1...v0.2.0
[0.1.1]: https://github.com/espetro/mcp-sim/compare/v0.1.0...v0.1.1
[0.1.0]: https://github.com/espetro/mcp-sim/releases/tag/v0.1.0
29 changes: 20 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@

mcp-sim is resilient: each platform adapter is auto-detected at startup, and a missing tool just means that platform's tools are skipped. You can run the server with **only iOS**, **only Android**, or **both**.

For full functionality on macOS, install:
The server itself runs on macOS, Linux, and Windows. iOS support requires macOS + Xcode (Simulator is Apple-only tooling); Android and the agent-device controller work on all three OSes.

| Tool | Required for | Install |
|------|---|---|
| Xcode + iOS Simulators | iOS tools | `xcode-select --install` (or App Store → Xcode) |
| Android SDK + `emulator` + `adb` | Android tools | Install [Android Studio](https://developer.android.com/studio) or `brew install --cask android-commandlinetools` |
| `agent-device` | verification controller | `brew install agent-device` (or see [agent-device docs](https://github.com/espetro/agent-device)) |
| Tool | Required for | OS | Install |
|------|---|---|---|
| Xcode + iOS Simulators | iOS tools | macOS only | `xcode-select --install` (or App Store → Xcode) |
| Android SDK + `emulator` + `adb` | Android tools | macOS, Linux, Windows | Install [Android Studio](https://developer.android.com/studio) or `brew install --cask android-commandlinetools` |
| `agent-device` | verification controller | macOS, Linux, Windows | `brew install agent-device` (or see [agent-device docs](https://github.com/espetro/agent-device)) |

Each tool is checked via PATH probing at server startup. If `xcode-select -p` succeeds the iOS adapter registers; if `emulator` or `adb` is on PATH, the Android adapter registers; if `agent-device` resolves, the controller registers. Otherwise the relevant MCP tools are simply absent — the server still starts.

Expand All @@ -34,12 +34,15 @@ MCPSIM_AGENT_DEVICE_ENABLED=false mcp-sim serve
brew install espetro/mcp-sim/mcp-sim
```

### go install
<details>
<summary>go install (build from source)</summary>

```bash
go install github.com/espetro/mcp-sim/cmd/mcp-sim@latest
```

</details>

### GitHub Releases

Download pre-built binaries from [github.com/espetro/mcp-sim/releases](https://github.com/espetro/mcp-sim/releases).
Expand All @@ -63,7 +66,7 @@ Show version:

```bash
mcp-sim version
# mcp-sim 0.1.1 (commit, date)
# mcp-sim 0.2.0 (commit, date)
```

Configure your MCP client (Claude Code, Cursor, etc.):
Expand Down Expand Up @@ -98,11 +101,19 @@ For Tailscale-based remote access, see [docs/tailscale.md](docs/tailscale.md).

## Docs

Browse the hosted docs site: **https://espetro.github.io/mcp-sim/**

- [Architecture](docs/architecture.md) — adapter model and separation of concerns
- [Tailscale setup](docs/tailscale.md) — running over Tailscale
- [launchd](docs/launchd.md) — macOS service management
- [Running as a service](docs/service.md) — install as a native OS service (launchd/systemd/Windows Service)
- [Adding a platform](docs/adding-platform.md) — implementing the Platform interface

Run the docs site locally:

```bash
task docs
```

## License

Apache 2.0
10 changes: 10 additions & 0 deletions Taskfile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,16 @@ tasks:
cmds:
- go mod tidy

docs:
desc: Run docmd dev server for docs/ (live preview)
cmds:
- npx @docmd/core dev

docs-build:
desc: Build static docs site from docs/ (outputs to site/)
cmds:
- npx @docmd/core build

validate:
desc: Typecheck + lint + test (AI-agent parseable)
run: when_changed
Expand Down
Loading
Loading