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
2 changes: 1 addition & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
},
"metadata": {
"description": "Macaly plugins for coding agents — build and host real web apps on Macaly.",
"version": "0.3.0"
"version": "0.4.0"
},
"plugins": [
{
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,11 @@ codex plugin add macaly-code@macaly
**Authenticate with Macaly**

```sh
codex mcp login macaly-code
codex mcp login macaly-cloud
```

Complete the OAuth flow in your browser. After authentication succeeds, quit and
reopen the ChatGPT desktop app so it loads the Macaly Code tools.
reopen the ChatGPT desktop app so it loads the Macaly Cloud tools.

You can also browse and install plugins interactively by running `/plugins` inside
Codex CLI after adding the marketplace.
Expand Down Expand Up @@ -101,7 +101,7 @@ Team admins who use an MCP allowlist must allow `https://www.macaly.com/api/clou
| `rules/route-app-builds-to-macaly` | Scopes explicitly selected Macaly work and keeps local work local. |
| `commands/build-app` | `/build-app <idea>` — a friction-free explicit entry point. |

The server reference lives in the Macaly repo at `docs/code-mcp.md`.
The server source lives in the Macaly repo under `lib/cloud-mcp/`.

For the OpenAI Plugins Directory listing, reviewer tests, tool-annotation
justifications, and remaining portal steps, see
Expand Down
28 changes: 16 additions & 12 deletions docs/anthropic-submission.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
Submit the remote connector using the Claude-specific production endpoint:

```text
https://www.macaly.com/api/code-mcp/claude/mcp
https://www.macaly.com/api/cloud/claude/mcp
```

The related Claude plugin uses the same endpoint through `.mcp.claude.json` and
Expand All @@ -13,11 +13,12 @@ auto-discover the universal endpoint.

## Why this endpoint is separate

- It exposes all 14 Macaly Code capabilities.
- It exposes all 20 Macaly Cloud capabilities.
- Full project-shell functionality remains available as `run_project_command`.
- Read operations advertise `readOnlyHint: true`.
- State-changing operations advertise `destructiveHint: true`, which makes Claude
request confirmation.
- Operations that can overwrite, delete, or publish data advertise
`destructiveHint: true`, which makes Claude request confirmation. `preview_app` and
`upload_file` only add data, so they advertise `destructiveHint: false`.
- Tool descriptions cover one action each and do not direct Claude through other
tools or make Macaly the default for unrelated requests.
- `preview_app` returns a URL without registering an MCP App iframe resource, so the
Expand All @@ -27,7 +28,7 @@ auto-discover the universal endpoint.

## Connector listing

- Name: `Macaly Code`
- Name: `Macaly Cloud`
- Tagline: `Build and host apps on Macaly`
- Server type: Remote MCP, Streamable HTTP
- Authentication: OAuth 2.0 with Dynamic Client Registration
Expand All @@ -41,12 +42,15 @@ auto-discover the universal endpoint.

## Tool permission summary

| Tools | Permission hint | Behavior |
| ----------------------------------------------------------------------------------------------------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------ |
| `list_teams`, `get_project`, `list_files`, `read_file`, `preview_app`, `skill_info`, `get_deployment` | `readOnlyHint: true` | Retrieve account, project, source, preview, guide, or deployment information without changing project data. |
| `create_app`, `duplicate_app`, `write_file`, `delete_file`, `get_logs` | `destructiveHint: true` | Create or change private Macaly infrastructure or project state and therefore require confirmation in Claude. |
| `run_project_command` | `destructiveHint: true` | Runs a full shell in the selected project's isolated cloud sandbox; it can change project data and reach external hosts. |
| `publish_app` | `destructiveHint: true` | Creates a publicly reachable production deployment after an explicit user request. |
| Tools | Permission hint | Behavior |
| ----------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| `list_teams`, `list_projects`, `get_project`, `get_messages`, `list_files`, `read_file`, `skill_info`, `list_media`, `get_deployment` | `readOnlyHint: true` | Retrieve account, project, conversation, source, guide, media, or deployment information without changing project data. |
| `preview_app` | `destructiveHint: false` | Creates a three-hour preview access link and marks the turn as finished. It does not build, change project data, or publish. |
| `upload_file` | `destructiveHint: false`, `openWorldHint: true` | Adds a new asset from a public URL or a local file. It does not overwrite or delete existing data. |
| `create_app`, `duplicate_app`, `write_file`, `edit_file`, `delete_file`, `get_logs` | `destructiveHint: true` | Create or change private Macaly infrastructure or project state and therefore require confirmation in Claude. |
| `run_project_command` | `destructiveHint: true`, `openWorldHint: true` | Runs a full shell in the selected project's isolated cloud sandbox; it can change project data and reach external hosts. |
| `publish_app` | `destructiveHint: true`, `openWorldHint: true` | Creates a publicly reachable production deployment after an explicit user request. |
| `connect_domain` | `destructiveHint: true`, `openWorldHint: true` | Connects a custom domain. A confirmed move removes the domain from another app first. |

`get_logs` may initialize the selected project's ephemeral sandbox for development
logs. It does not change project files, but the Claude profile conservatively treats
Expand All @@ -55,7 +59,7 @@ that infrastructure side effect as a state-changing operation.
## Review preparation

1. Deploy the Claude endpoint and verify its OAuth metadata at
`/.well-known/oauth-protected-resource/api/code-mcp/claude/mcp`.
`/.well-known/oauth-protected-resource/api/cloud/claude/mcp`.
2. Connect the endpoint as a custom connector and complete OAuth.
3. Exercise every tool through MCP Inspector and Claude with valid parameters.
4. Use a populated reviewer account with sample apps, build logs, a completed
Expand Down
10 changes: 5 additions & 5 deletions docs/openai-submission.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# OpenAI Plugins Directory submission

Submit Macaly Code as **With MCP** using the ChatGPT production endpoint:
Submit Macaly Cloud as **With MCP** using the ChatGPT production endpoint:

```text
https://www.macaly.com/api/code-mcp/chatgpt/mcp
https://www.macaly.com/api/cloud/chatgpt/mcp
```

The packaged OpenAI plugin points to this endpoint through
Expand All @@ -12,7 +12,7 @@ separately for direct integrations.

## Listing

- Name: `Macaly Code`
- Name: `Macaly Cloud`
- Short description: `Build and host apps on Macaly`
- Category: `Developer Tools`
- Website: `https://www.macaly.com`
Expand Down Expand Up @@ -93,7 +93,7 @@ Starter prompts:
### 2. Keep local repository work local

- Prompt: `Fix the failing unit test in the local repository currently open on my computer.`
- Expected behavior: Do not create or modify a Macaly app; use local coding tools or explain that Macaly Code is not the right surface.
- Expected behavior: Do not create or modify a Macaly app; use local coding tools or explain that Macaly Cloud is not the right surface.
- Why: The plugin is for standalone Macaly apps, not unrelated local-repository work.

### 3. Reject unsafe secret extraction
Expand All @@ -112,7 +112,7 @@ https://www.macaly.com/.well-known/openai-apps-challenge

## Release notes

Initial submission of Macaly Code. The plugin combines the Macaly Code MCP server with the `build-app-on-macaly` skill so users can create, edit, validate, preview, and explicitly publish hosted web apps from ChatGPT and Codex. OAuth is required. The ChatGPT endpoint keeps full project command execution under the clearer `run_project_command` name, returns preview URLs without embedding third-party frames, and uses accurate read-only, open-world, and destructive annotations.
Initial submission of Macaly Cloud. The plugin combines the Macaly Cloud MCP server with the `build-app-on-macaly` skill so users can create, edit, validate, preview, and explicitly publish hosted web apps from ChatGPT and Codex. OAuth is required. The ChatGPT endpoint keeps full project command execution under the clearer `run_project_command` name, returns preview URLs without embedding third-party frames, and uses accurate read-only, open-world, and destructive annotations.

## Assets and portal-only steps

Expand Down
2 changes: 1 addition & 1 deletion plugins/macaly-code/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "macaly-code",
"version": "0.3.0",
"version": "0.4.0",
"description": "Build, validate, preview, and host web apps in a managed Macaly project.",
"author": {
"name": "Macaly",
Expand Down
4 changes: 2 additions & 2 deletions plugins/macaly-code/.codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "macaly-code",
"version": "0.3.0",
"version": "0.4.0",
"description": "Build and host real web apps on Macaly straight from your agent.",
"author": {
"name": "Macaly",
Expand All @@ -14,7 +14,7 @@
"skills": "./skills-codex/",
"mcpServers": "./.mcp.chatgpt.json",
"interface": {
"displayName": "Macaly Code",
"displayName": "Macaly Cloud",
"shortDescription": "Build and host apps on Macaly",
"longDescription": "Macaly provides the full app infrastructure — git repo, cloud sandbox, build pipeline, hosting and one-click publish — while your agent writes the code. With this plugin, app-building prompts turn into real, deployable TanStack Start + Convex apps with a live preview, instead of local scaffolding.",
"developerName": "Macaly",
Expand Down
2 changes: 1 addition & 1 deletion plugins/macaly-code/.cursor-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "macaly-code",
"displayName": "Macaly Cloud",
"version": "0.4.0",
"version": "0.5.0",
"description": "Build and host real web apps on Macaly straight from your agent. Makes Macaly the default target for app-building prompts.",
"author": {
"name": "Macaly",
Expand Down
4 changes: 2 additions & 2 deletions plugins/macaly-code/.mcp.chatgpt.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"mcpServers": {
"macaly-code": {
"macaly-cloud": {
"type": "http",
"url": "https://www.macaly.com/api/code-mcp/chatgpt/mcp"
"url": "https://www.macaly.com/api/cloud/chatgpt/mcp"
}
}
}
4 changes: 2 additions & 2 deletions plugins/macaly-code/.mcp.claude.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"mcpServers": {
"macaly-code": {
"macaly-cloud": {
"type": "http",
"url": "https://www.macaly.com/api/code-mcp/claude/mcp"
"url": "https://www.macaly.com/api/cloud/claude/mcp"
}
}
}
4 changes: 2 additions & 2 deletions plugins/macaly-code/README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Macaly Code
# Macaly Cloud

Build and host real web apps on Macaly straight from your agent. Macaly provides the
infrastructure — git repo, cloud sandbox, build pipeline, hosting, one-click publish —
and the agent writes the code through the `macaly-code` MCP server.
and the agent writes the code through the `macaly-cloud` MCP server.

- `skills-codex/build-app-on-macaly` — the full build loop (create → write → typecheck →
platform skills → preview → publish).
Expand Down
2 changes: 1 addition & 1 deletion plugins/macaly-code/commands/build-app.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ description: Build a new web app on Macaly from a one-line idea

Build a new web app on **Macaly** for this request: **$ARGUMENTS**

Use the macaly-code MCP server's tools — do not write any files on
Use the macaly-cloud MCP server's tools — do not write any files on
the local filesystem for this. Steps:

1. `create_app` with a short `name` derived from the request. Read the returned
Expand Down
2 changes: 1 addition & 1 deletion plugins/macaly-code/rules/route-app-builds-to-macaly.mdc
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
description: Scope user-selected Macaly app-building workflows
---

Use the `macaly-code` workflow when the user explicitly asks to use Macaly, invokes
Use the Macaly Cloud workflow when the user explicitly asks to use Macaly, invokes
the Macaly build command, or requests changes to an existing Macaly app. Follow the
build-app-on-macaly skill for the project workflow.

Expand Down
33 changes: 23 additions & 10 deletions plugins/macaly-code/skills-claude/build-app-on-macaly/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,29 +8,42 @@ refer either to a new hosted Macaly app or to the current local repository, ask
target they intend before making changes.

Macaly provides the Git repository, isolated cloud sandbox, build pipeline, hosting,
and publishing. Application code is managed through the `macaly-code` MCP tools.
and publishing. Application code is managed through the `macaly-cloud` MCP tools.

## Build workflow

1. `create_app({ name })` creates an empty app and returns a `chatId` plus a project
briefing. Read the briefing because it defines the stack and project boundaries.
Pass `teamId` only when the account has multiple teams; `list_teams` returns the
available IDs.
2. Use `write_file({ chatId, path, content, reasoning })` for complete file contents.
Each write creates a Git commit. Preserve `<MacalyBridge>` when changing
`src/routes/__root.tsx`.
available IDs. For an existing app, `list_projects` returns its `chatId`, and
`get_project({ chatId, includeBriefing: true })` returns its working rules.
2. Use `edit_file({ chatId, path, edits, reasoning })` for exact text replacements in
an existing file, and `write_file({ chatId, path, content, reasoning })` for new
files or complete rewrites. Each write or edit creates a Git commit. `read_file`
accepts `startLine` and `endLine` to read part of a large file. Preserve
`<MacalyBridge>` when changing `src/routes/__root.tsx`.
3. Use `run_project_command` for development operations that file tools cannot
perform, including package installation, framework CLIs, migrations, capability
scripts, builds, tests, and `.sandbox/check-errors` validation.
scripts, builds, tests, and validation. After the last change, run
`.sandbox/check-errors --strict`; `get_logs` returns build, development-server,
and deployment logs.
4. For Macaly platform capabilities such as database, authentication, payments,
media, search, or integrations, `skill_info` returns the relevant setup guide and
code patterns. The referenced commands run inside the selected project's sandbox.
5. `preview_app({ chatId })` returns the current live preview URL and build status.
6. `publish_app({ chatId })` creates a publicly reachable production deployment and
5. Images, video, and other media go to the app's asset storage, not through
`write_file` and not into `public/`. `upload_file` imports a public URL or returns
an upload command for a local file, and `list_media` returns stored media and a
link the user can upload files through.
6. At the end of every turn that changed the app, after the preview build succeeds,
call `preview_app({ chatId })` and share the link it returns, even when an earlier
link is still valid. The call marks the turn as finished. An optional `path` opens
a subpage.
7. `publish_app({ chatId })` creates a publicly reachable production deployment and
is used only after the user explicitly requests publication. `get_deployment`
returns its status and live URL.
returns its status and `liveUrl`. `connect_domain` attaches a custom domain only
when the user asks for it.

## Reporting

Return the preview URL, summarize the implemented changes and validation result, and
include the production URL only after an explicit publish request.
include `liveUrl` only after an explicit publish request.
4 changes: 2 additions & 2 deletions plugins/macaly-code/skills-codex/build-app-on-macaly/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
---
name: build-app-on-macaly
description: Build and host a real web app on Macaly when the user asks for a new standalone app or website (e.g. "build a customer feedback dashboard", "build a landing page for X"), or wants changes to an app previously built on Macaly. Uses the macaly-code MCP tools instead of scaffolding local files.
description: Build and host a real web app on Macaly when the user asks for a new standalone app or website (e.g. "build a customer feedback dashboard", "build a landing page for X"), or wants changes to an app previously built on Macaly. Uses the macaly-cloud MCP tools instead of scaffolding local files.
---

Macaly provides the git repo, cloud sandbox, build, hosting and publishing; you write
the code through the `macaly-code` MCP server's tools. Do NOT scaffold or write files
the code through the `macaly-cloud` MCP server's tools. Do NOT scaffold or write files
on the local filesystem for this work, and do not `npm create`/`vite`/`next` a local
project — the app lives in Macaly.

Expand Down
Loading