# Adapto Cms Cli

> Command-line interface for the Adapto CMS management API. Give LLM agents full knowledge of the CLI (for MCP/tool-use scenarios).

- **Type:** MCP server
- **Install:** `agentstack add mcp-adaptocms-adapto-cms-cli`
- **Verified:** Pending review
- **Seller:** [adaptocms](https://agentstack.voostack.com/s/adaptocms)
- **Installs:** 0
- **Category:** [AI & ML](https://agentstack.voostack.com/c/ai-and-ml)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [adaptocms](https://github.com/adaptocms)
- **Source:** https://github.com/adaptocms/adapto-cms-cli
- **Website:** https://adaptocms.com/

## Install

```sh
agentstack add mcp-adaptocms-adapto-cms-cli
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# Adapto CMS CLI

Command-line interface for the [Adapto CMS](https://adaptocms.com) Management API.

## Install

### Quick install (macOS/Linux)

```bash
curl -sSL https://raw.githubusercontent.com/adaptocms/adapto-cms-cli/main/scripts/install.sh | bash
```

### From source

```bash
go install github.com/adaptocms/adapto-cms-cli@latest
```

### From releases

Download the binary for your platform from [GitHub Releases](https://github.com/adaptocms/adapto-cms-cli/releases).

## Quick Start

```bash
# Login (credentials are saved automatically)
adapto auth login --email you@example.com --password yourpassword

# List articles
adapto articles list

# Get JSON output
adapto articles list --json

# Create an article (interactive prompts for missing fields)
adapto articles create

# Create with flags
adapto articles create \
  --title "My Article" \
  --content "Hello world" \
  --slug "my-article" \
  --author "Jane" \
  --language "en-US"
```

## LLM Integration

The CLI is built to be driven by LLM agents. One command gives an agent full knowledge of every command, flag, and workflow:

```bash
adapto llm-info
```

Pipe it into your agent's context (Claude Code, Cursor, MCP tools) and the agent can manage content end to end. Every command supports `--json` for machine-readable output.

## Configuration

None needed in the common case: `adapto auth login` stores credentials in `~/.config/adapto/credentials.json` and every command reads them from there.

For scripting and overrides:

| Variable               | Description                                                    |
| ---------------------- | -------------------------------------------------------------- |
| `ADAPTO_CLI_TOKEN`     | Bearer token (overrides stored credentials)                    |
| `ADAPTO_CLI_API_URL`   | Management API base URL (default: `https://api.adaptocms.com`) |
| `ADAPTO_CLI_TENANT_ID` | Tenant ID (overrides stored credentials)                       |

All variables can also be passed as flags: `--token`, `--api-url`, `--tenant-id`.

> **Two APIs.** The CLI talks only to the Management API (`api.adaptocms.com`). The `ADAPTO_API_URL` / `ADAPTO_API_KEY` variables found in client site `.env` files configure the read-only Public API and are ignored by the CLI. Never point `ADAPTO_CLI_API_URL` at `public-api.adaptocms.com`.

## Commands

```
adapto
├── articles                          Manage articles
│   ├── archive                 Archive an article
│   ├── categories              List categories of an article
│   ├── create                      Create an article
│   ├── create-translation   Create an article translation
│   ├── delete                  Delete an article
│   ├── get                     Get an article by ID
│   ├── get-by-slug           Get an article by slug
│   ├── list                        List articles
│   ├── publish                 Publish an article
│   ├── translations            List translations of an article
│   └── update                  Update an article
├── auth                              Authentication commands
│   ├── activate                    Activate account with token
│   ├── callback-github             Complete GitHub OAuth callback
│   ├── change-password             Change your password
│   ├── login                       Login with email and password
│   ├── login-github                Login via GitHub OAuth
│   ├── login-google                Login via Google credential
│   ├── logout                      Logout (revoke refresh token)
│   ├── me                          Get current user info
│   ├── orgs                        List your organizations and their tenants
│   ├── refresh                     Refresh access token
│   ├── register                    Register a new account
│   ├── request-password-reset      Request a password reset email
│   ├── resend-activation           Resend activation email
│   ├── reset-password              Reset password with token
│   └── switch-tenant               Switch active tenant/organization
├── categories                        Manage categories
│   ├── add-article    Add an article to a category
│   ├── articles       List articles in a category
│   ├── create                      Create a category
│   ├── create-translation   Create a category translation
│   ├── delete                  Delete a category
│   ├── get                     Get a category by ID
│   ├── get-by-slug           Get a category by slug
│   ├── list                        List categories
│   ├── remove-article    Remove an article from a category
│   ├── subcategories           List subcategories
│   ├── translations            List translations of a category
│   └── update                  Update a category
├── collections                       Manage custom collections
│   ├── create                      Create a collection
│   ├── delete                  Delete a collection
│   ├── get                     Get a collection by ID
│   ├── get-by-slug           Get a collection by slug
│   ├── items                       Manage collection items
│   │   ├── archive    Archive a collection item
│   │   ├── create   Create a collection item
│   │   ├── create-batch   Create multiple items in batch
│   │   ├── create-translation    Create an item translation
│   │   ├── delete    Delete a collection item
│   │   ├── get    Get a collection item
│   │   ├── get-by-slug    Get a collection item by slug
│   │   ├── list   List items in a collection
│   │   ├── publish    Publish a collection item
│   │   ├── translations    List translations of an item
│   │   └── update    Update a collection item
│   ├── list                        List collections
│   └── update                  Update a collection
├── files                             Manage files
│   ├── create-metadata             Create file metadata (before upload)
│   ├── delete                  Delete a file
│   ├── get                     Get file info by ID
│   ├── list                        List files
│   ├── multipart-abort    Abort a multipart upload
│   ├── multipart-complete    Complete a multipart upload
│   ├── multipart-init     Initialize a multipart upload
│   ├── multipart-upload      Upload a part of a multipart upload
│   ├── update                  Update file metadata
│   ├── upload            Upload a file
│   └── upload-by-id    Upload file content for an existing file record
├── llm-info                          Print full CLI reference for LLM consumption
├── microcopy                         Manage micro copy entries
│   ├── count                       Count micro copy entries
│   ├── create                      Create a micro copy entry
│   ├── create-translation   Create a micro copy translation
│   ├── delete                  Delete a micro copy entry
│   ├── get                     Get micro copy by ID
│   ├── get-by-key             Get micro copy by key
│   ├── get-by-language   Get all micro copy for a language
│   ├── list                        List micro copy entries
│   ├── translations            List translations of a micro copy entry
│   └── update                  Update a micro copy entry
├── pages                             Manage pages
│   ├── archive                 Archive a page
│   ├── create                      Create a page
│   ├── create-translation   Create a page translation
│   ├── delete                  Delete a page
│   ├── get                     Get a page by ID
│   ├── get-by-slug           Get a page by slug
│   ├── list                        List pages
│   ├── publish                 Publish a page
│   ├── translations            List translations of a page
│   └── update                  Update a page
├── status                            API status commands
│   └── version                     Get API version info
└── version                           Print the CLI version
```

## Output

By default, commands output formatted tables. Use `--json` for JSON output:

```bash
adapto articles list --json
adapto articles get abc123 --json
```

## Interactive Mode

When running in a terminal (TTY), missing required parameters will be prompted interactively. When piped or in scripts, missing parameters produce an error with usage hints.

## File Upload

```bash
# Single-step upload (creates metadata + uploads content)
adapto files upload ./photo.jpg

# Two-step: create metadata first, then upload by ID
adapto files create-metadata --filename photo.jpg --content-type image/jpeg
adapto files upload-by-id FILE_ID ./photo.jpg
```

## Media Objects

Articles, pages, and collection items support attaching media (images, videos, embeds) via the `--media-json` flag on create, update, and create-translation commands:

```bash
adapto articles create \
  --title "My Post" \
  --content "Hello" \
  --slug my-post \
  --author "Jane" \
  --language en-US \
  --media-json '[{
    "placement_key": "hero_image",
    "media_object": {
      "id": "m1",
      "file_id": "FILE_ID",
      "url": "https://cdn.example.com/photo.jpg",
      "type": "image"
    },
    "alt_text": "Hero image"
  }]'
```

Each placement object supports:

- `placement_key`: where the media goes (e.g. `hero_image`, `body_image_1`)
- `media_object`: `id`, `file_id`, `url`, `type` (image/video/audio/document/other/youtube/vimeo/tiktok/instagram_reel/instagram_post), `title`, `description`
- `caption`, `alt_text`, `meta_data`: optional metadata

The same `--media-json` flag works on `adapto pages create/update` and `adapto collections items create/update`.

## Development

Building, testing, and releasing: see [DEVELOPMENT.md](DEVELOPMENT.md).

## License

MIT, see [LICENSE](LICENSE).

## Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [adaptocms](https://github.com/adaptocms)
- **Source:** [adaptocms/adapto-cms-cli](https://github.com/adaptocms/adapto-cms-cli)
- **License:** MIT
- **Homepage:** https://adaptocms.com/

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** yes
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** yes
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: flagged — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/mcp-adaptocms-adapto-cms-cli
- Seller: https://agentstack.voostack.com/s/adaptocms
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
