Anythink CLI agent
Open source CLI to control Anythink from the command line
by anythink-cloud·MIT license·★ 6 Stars on the repo·GitHub ↗
Files of Anythink CLI
anythink-cloud/
Show the full text984 lines
Anythink CLI
The official command-line interface for Anythink — the headless backend platform for developers and founders. Manage your projects, entities, data, workflows, users, files, and payments without leaving the terminal.
░███ ░██ ░██ ░██ ░██
░██░██ ░██ ░██ ░██
░██ ░██ ░████████ ░██ ░██ ░████████ ░████████ ░██░████████ ░██ ░██
░█████████ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██░██ ░██ ░██ ░██
░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██░██ ░██ ░███████
░██ ░██ ░██ ░██ ░██ ░███ ░██ ░██ ░██ ░██░██ ░██ ░██ ░██
░██ ░██ ░██ ░██ ░█████░██ ░████ ░██ ░██ ░██░██ ░██ ░██ ░██
░██
░███████
Contents
Installation
Both the anythink CLI and the anythink-mcp server are distributed together. The quickest way to get both is Homebrew.
Homebrew (macOS / Linux) — recommended
brew install anythink-cloud/tap/anythink
This installs both commands onto your PATH:
anythink— the CLIanythink-mcp— the MCP server (see MCP server)
Upgrade later with brew upgrade anythink.
macOS / Linux — download binary
Grab the latest release for your platform from the Releases page:
| Platform | Binary |
|---|---|
| macOS (Apple Silicon) | anythink-osx-arm64 |
| macOS (Intel) | anythink-osx-x64 |
| Linux (x86_64) | anythink-linux-x64 |
| Linux (ARM64) | anythink-linux-arm64 |
# Example — macOS Apple Silicon
curl -Lo anythink https://github.com/anythink-cloud/anythink-cli/releases/latest/download/anythink-osx-arm64
chmod +x anythink
sudo mv anythink /usr/local/bin/
The MCP server ships as a matching anythink-mcp-<platform> binary on the same release — download and install it the same way (e.g. anythink-mcp-osx-arm64).
Verify the download against checksums.txt in the release assets:
sha256sum -c checksums.txt --ignore-missing
.NET global tool
If you have the .NET 8 SDK installed:
dotnet tool install --global anythink-cli
Build from source
git clone https://github.com/anythink-cloud/anythink-cli
cd anythink-cli
dotnet build
dotnet run -- --help
Getting started
# 1. Create an account (or log in if you already have one)
anythink signup
# 2. Create a billing account
anythink accounts create --name "My Company"
# 3. Create a project
anythink projects create "My App" --region lon1
# 4. Connect to the project
anythink projects use <project-id>
# 5. Start building
anythink entities list
anythink workflows list
Your credentials and project profiles are stored in ~/.anythink/config.json. You can manage multiple projects by running projects use to switch between them.
Command reference
signup / login / logout
anythink signup Create a new Anythink account
anythink login Log in to the platform
anythink logout Remove saved credentials for a project profile
signup and login are interactive — they prompt for email and password and walk you through connecting to a billing account and project on first run.
accounts
Manage billing accounts. A billing account is the container for one or more projects and holds your subscription and payment details.
anythink accounts list List your billing accounts
anythink accounts create Create a new billing account
anythink accounts use <id> Set the active billing account
Examples
anythink accounts create --name "Acme Ltd" --email [email protected]
anythink accounts use a1b2c3d4
projects
Create and manage Anythink projects. Each project is an isolated backend instance with its own database, auth, files, and workflows.
anythink projects list List projects in the active billing account
anythink projects create <name> Create a new project
anythink projects use <id> Connect to a project (sets it as the active profile)
anythink projects delete <id> Delete a project
Options — projects create
| Flag | Description |
|---|---|
--region <id> |
Deployment region (e.g. lon1) |
--plan <id> |
Plan ID (see anythink plans) |
Examples
anythink projects create "My App" --region lon1
anythink projects use a1b2c3d4
anythink projects delete a1b2c3d4 --yes
config
View and manage saved CLI profiles.
anythink config show List all profiles and platform settings
anythink config use <profile> Set the active project profile
anythink config remove <profile> Remove a profile
Profiles are named by project alias or ID and stored in ~/.anythink/config.json.
entities
Manage entities (database tables) in the active project.
anythink entities list List all entities
anythink entities get <name> Get entity details and fields
anythink entities create <name> Create a new entity
anythink entities update <name> Update entity settings
anythink entities delete <name> Delete an entity and all its data
Options — entities create
| Flag | Description |
|---|---|
--rls |
Enable row-level security |
--public |
Make the entity publicly readable |
--lock |
Lock new records (prevent direct creation) |
--junction |
Mark as a junction (many-to-many) table |
Examples
anythink entities create orders --rls
anythink entities get customers
anythink entities delete temp_data --yes
fields
Manage fields on an entity. Fields map directly to database columns.
anythink fields list <entity> List fields on an entity
anythink fields add <entity> <name> Add a field
anythink fields delete <entity> <id> Delete a field
Options — fields add
| Flag | Description |
|---|---|
--type <type> |
Field type: varchar, text, int, float, bool, datetime, json, uuid |
--required |
Mark the field as required |
--unique |
Enforce a unique constraint |
--indexed |
Add a database index |
--default <value> |
Default value |
Examples
anythink fields list customers
anythink fields add customers email --type varchar --unique --required
anythink fields add products price --type float --required
anythink fields delete customers 1234 --yes
data
CRUD operations on entity records.
anythink data list <entity> List records
anythink data get <entity> <id> Get a single record by ID
anythink data create <entity> Create a new record
anythink data update <entity> <id> Update a record
anythink data delete <entity> <id> Delete a record
Options — data list
| Flag | Description |
|---|---|
--limit <n> |
Records per page (default: 20) |
--page <n> |
Page number (default: 1) |
--filter <expr> |
Field filters — JSON ({"status":"draft","total":{"gte":10}}) or field=value pairs (status=draft&total=GTE:10). See below. |
--json |
Output raw JSON instead of table |
--all |
Stream all pages as sequential JSON objects (requires --json, constant memory) |
Filter operators (JSON form) — {"field": value} matches exactly, {"field": [a, b]} matches any, {"field": null} matches empty. For anything else use an operator object, e.g. {"price": {"gte": 10, "lt": 100}}:
| Operator | Meaning | field=value form |
|---|---|---|
eq / ne |
Equal / not equal | x=v / x=!v |
gt gte lt lte |
Comparisons | x=GT:v … |
contains / not_contains |
Case-insensitive substring | x=C:v / x=NC:v |
starts_with / ends_with |
Case-insensitive prefix/suffix | x=SW:v / x=EW:v |
in |
Any of a list | x=IN:a,b |
null: true / null: false |
Empty / not empty | x=NULL: / x=NNULL: |
exists: true / exists: false |
Has / lacks related records | x=EXISTS: / x=NOT_EXISTS: |
Options — data create / data update
| Flag | Description |
|---|---|
--data <json> |
JSON object of field values |
Examples
anythink data list blog_posts --limit 10
anythink data get blog_posts 42
anythink data create blog_posts --data '{"title":"Hello World","status":"draft"}'
anythink data update blog_posts 42 --data '{"status":"approved"}'
anythink data delete blog_posts 42 --yes
search
Full-text search across your entities, plus index lifecycle management.
anythink search query <text> Run a search
anythink search similar <entity> <id> Find similar documents
anythink search rehydrate [<entity>] Rebuild the search index (admin)
anythink search purge [<entity>] Wipe the search index (admin)
anythink search audit <entity> Compare configured public-searchable fields
with what public search actually returns
Options — search query
| Flag | Description |
|---|---|
--entities <list> |
Comma-separated entity names. Default: all indexed entities. |
--filter <expr> |
Filter expression, e.g. "status=published AND category=news". Supports _geoRadius. |
--sort <list> |
Comma-separated sort fields, e.g. "created_at:desc,id:asc". |
--facet <fields> |
Comma-separated fields to compute facet counts on. |
--highlight |
Highlight matched terms in results. |
--page N |
Page number (default: 1). |
--limit N |
Results per page (1-100, default: 20). |
--public |
Use the unauthenticated /search/public endpoint (only public-marked fields). |
--json |
Print the raw response JSON. |
Index lifecycle
rehydrate and purge are admin operations on the search index:
search rehydrate— rebuilds the index from the database (no data loss; just resyncs)search purge— deletes the index (runrehydrateafter to repopulate)
Both confirm by default; pass -y / --yes to skip the prompt for automation.
search audit — public-search data leak check
Compares what the entity's schema says should be public-searchable (fields with publicly_searchable=true and the entity's own is_public=true) against what /search/public actually returns. Any field appearing in public results that isn't on the allowlist is reported as a leak.
Exits with code 1 if a leak is detected — useful for CI/CD.
Examples
# Browse everything
anythink search query "*"
# Filtered search with sorting
anythink search query "anythink" --filter "status=published" --sort "created_at:desc"
# Compare what public visitors see vs what's in the database
anythink search audit posts
anythink search audit users --query "alice" --sample 10
# Reindex after a schema change
anythink search rehydrate posts
anythink search rehydrate --yes # everything (admin)
# Geo search (radius in metres)
anythink search query "*" --filter "_geoRadius(51.5074,-0.1278,5000)"
workflows
Manage automation workflows. Workflows can be triggered on a cron schedule, when entities are created or updated, or manually.
anythink workflows list List all workflows
anythink workflows get <id> Get workflow details and steps
anythink workflows create <name> Create a new workflow
anythink workflows enable <id> Enable a workflow
anythink workflows disable <id> Disable a workflow
anythink workflows trigger <id> Manually trigger a workflow
anythink workflows delete <id> Delete a workflow
Options — workflows create
| Flag | Description |
|---|---|
--trigger <type> |
Trigger type: Timed, EntityCreated, EntityUpdated, Manual |
--cron <expr> |
Cron expression (for Timed trigger, e.g. 0 6 * * *) |
--entity <name> |
Entity name (for EntityCreated / EntityUpdated triggers) |
Examples
anythink workflows create daily-sync --trigger Timed --cron "0 6 * * *"
anythink workflows trigger 76
anythink workflows disable 83
users
Manage users in the active project.
anythink users list List all users
anythink users me Show the currently authenticated user
anythink users get <id> Get a user by ID
anythink users invite <email> <first> <last> Create a user and send an invitation email
anythink users delete <id> Delete a user
Options — users invite
| Flag | Description |
|---|---|
--role-id <id> |
Assign a role to the new user |
Examples
anythink users list
anythink users invite [email protected] Alice Smith --role-id 3
anythink users delete 42 --yes
files
Manage uploaded files in the active project.
anythink files list List uploaded files
anythink files get <id> Get file metadata by ID
anythink files upload <path> Upload a file
anythink files delete <id> Delete a file
Options — files list
| Flag | Description |
|---|---|
--page <n> |
Page number |
--limit <n> |
Files per page (default: 25) |
Options — files upload
| Flag | Description |
|---|---|
--public |
Make the file publicly accessible |
Examples
anythink files list
anythink files upload logo.png --public
anythink files upload export.csv
anythink files delete 12 --yes
roles
Manage roles in the active project. Roles control what authenticated users can access.
anythink roles list List all roles
anythink roles create <name> Create a new role
anythink roles delete <id> Delete a role
Options — roles create
| Flag | Description |
|---|---|
--description <text> |
Human-readable description of the role |
Examples
anythink roles list
anythink roles create editor --description "Can edit content"
anythink roles delete 5 --yes
api-keys
Issue and manage API keys for non-interactive access (CI pipelines, scripts, integrations). Each key is scoped to a permission set, has an expiry, and is tied to the user that created it.
The raw key is shown once on creation and never retrievable — save it immediately or use --save-as to write it directly into a CLI profile.
anythink api-keys list List your API keys
anythink api-keys create <name> --permissions ... Create a new key
anythink api-keys revoke <id> Revoke a key
Options — api-keys create
| Flag | Description |
|---|---|
--permissions <list> |
Required. Comma-separated permission names, e.g. data:read,data:create |
--expires-in <days> |
Days until expiry (default: 90, max: 365) |
--no-expiry-cap |
Allow --expires-in greater than 365 days |
--save-as <profile> |
Save the new key directly to a CLI profile instead of printing it |
--json |
Print the response as JSON to stdout (the key is in this output — handle carefully) |
-y, --yes |
Skip the confirmation prompt |
Output behaviour
By default, the success message goes to stdout and the raw key goes to stderr on its own line. This makes it easy to capture only the key:
anythink api-keys create ci-deploy --permissions data:read --yes 2> key.txt
If the server drops any of the requested permissions because the current user does not hold them, the CLI surfaces a loud warning so you do not end up with a quietly under-scoped key.
Examples
# Create a 90-day key for CI
anythink api-keys create github-actions --permissions "data:read,data:create" --yes 2> key.txt
# Create a key and save it directly into a profile (key never echoes)
anythink api-keys create scraper --permissions data:read --save-as scraper-bot --yes
anythink --profile scraper-bot data list posts
# Revoke a key
anythink api-keys revoke 42 --yes
menus
Manage dashboard sidebar menus in the active project. Menus control what entities appear in the Anythink dashboard and how they are grouped.
anythink menus list List all menus with tree structure
anythink menus add-item <menu_id> <entity> Add an entity to a dashboard menu
Options — menus add-item
| Flag | Description |
|---|---|
--icon <name> |
Lucide icon name (e.g. MessageCircle, Target) |
--name <text> |
Display name (defaults to entity name, title-cased) |
--parent <id> |
Parent menu item ID for nesting under a group |
Examples
# List all menus and their items
anythink menus list
# Add "Check-ins" under the Profiles group (parent 168) in admin menu (250)
anythink menus add-item 250 check_ins --icon MessageCircle --parent 168
# Add a top-level menu item
anythink menus add-item 250 badges --icon Award
integrations
Manage integrations — both the catalog of available providers (Claude, OpenAI, Slack, Google, etc.) and the active connections that hold credentials for them.
anythink integrations list List available providers
anythink integrations get <provider> Show details and operations for one provider
anythink integrations connections list [--provider <p>] List your active connections
anythink integrations connect <provider> Create an API-key connection (Claude, OpenAI, etc.)
anythink integrations oauth status <provider> Show OAuth client setup status
anythink integrations oauth configure <provider> Set the OAuth client ID + secret
anythink integrations oauth connect <provider> Connect via the browser OAuth flow
anythink integrations test <connection-id> Test a connection
anythink integrations enable <connection-id> Enable a connection
anythink integrations disable <connection-id> Disable a connection
anythink integrations disconnect <connection-id> Delete a connection
anythink integrations execute <provider> <operation> Run an operation on a connected provider
API-key providers — integrations connect
| Flag | Description |
|---|---|
--api-key <key> |
API key for the provider. If omitted, you'll be prompted (input is hidden). |
--name <name> |
Friendly name for this connection (default: <provider> connection) |
--user-connection |
Make this a user-scoped connection (only the current user sees it). Default: tenant-wide. |
OAuth providers — integrations oauth connect
The CLI starts a local HTTP listener on http://localhost:8745/callback, opens your browser to the provider's authorisation URL, and exchanges the returned code for a connection — no copy/paste of auth codes required.
| Flag | Description |
|---|---|
--name <name> |
Friendly name for this connection |
--user-connection |
Make this a user-scoped connection |
--port <n> |
Local callback port (default: 8745) |
--no-open |
Don't try to open the browser — just print the URL |
--timeout <secs> |
How long to wait for the callback (default: 300) |
OAuth credentials need to be set up once per provider before you can connect:
anythink integrations oauth configure slack # prompts for client_id + secret (hidden)
anythink integrations oauth connect slack --name main
Running operations — integrations execute
| Flag | Description |
|---|---|
--input <k=v> |
Input parameter as key=value. Repeatable. |
--inputs <json> |
All inputs as a JSON object. |
--json |
Print the full JSON response (default: just the content field if present). |
Examples
# Browse what's available
anythink integrations list
anythink integrations get claude
# API-key flow (Claude, OpenAI)
anythink integrations connect claude --name "main"
anythink integrations execute claude generate-text --input "prompt=Tell me a haiku"
# OAuth flow (Slack, Google, GitHub)
anythink integrations oauth configure slack
anythink integrations oauth connect slack --name main
# Manage connections
anythink integrations connections list
anythink integrations test <connection-id>
anythink integrations disable <connection-id>
anythink integrations disconnect <connection-id> --yes
pay
Configure and manage Anythink Pay — the built-in Stripe Connect integration for accepting payments in your project.
anythink pay status Show Stripe Connect account status
anythink pay connect Set up a Stripe Connect account and start onboarding
anythink pay payments List recent payments
anythink pay methods List saved payment methods
Options — pay payments
| Flag | Description |
|---|---|
--page <n> |
Page number |
--limit <n> |
Payments per page (default: 25) |
pay connect is interactive — it prompts for business type, country, and contact email, creates a Stripe Connect account, then opens the Stripe onboarding URL in your browser.
Examples
anythink pay status
anythink pay connect
anythink pay payments --limit 50
oauth
Configure OAuth social sign-in providers for the active project.
anythink oauth google status Show Google OAuth configuration status
anythink oauth google configure Set Google OAuth client ID and secret
Google OAuth lets your project's users sign in with their Google account. You'll need a Google Cloud project with the OAuth 2.0 credentials created — see the Google Cloud Console.
Set the authorised redirect URI in your Google Cloud credentials to:
https://api.my.anythink.cloud/org/<your-org-id>/auth/v1/google/callback
Examples
anythink oauth google status
anythink oauth google configure
api
List all API endpoints available for the active project — both platform routes and the dynamically generated REST routes for your entities.
anythink api List all endpoints
anythink api --json Output as JSON (useful for AI tooling)
docs
Print the full CLI reference.
anythink docs Print reference as markdown
anythink docs --json Print reference as JSON (for AI/tooling consumption)
migrate
Copy the entity schema (entities + fields) from one project profile to another. Useful for promoting a schema from staging to production.
anythink migrate --from <profile> --to <profile>
Options
| Flag | Description |
|---|---|
--from <profile> |
Source profile name (required) |
--to <profile> |
Destination profile name (required) |
--dry-run |
Show what would be migrated without making changes |
Examples
anythink migrate --from my-app-staging --to my-app-prod
anythink migrate --from my-app-staging --to my-app-prod --dry-run
plans
List available Anythink plans.
anythink plans List plans
anythink plans --json Output as JSON
MCP server
The Anythink MCP server exposes the platform to AI assistants (Claude, Cursor, etc.) via the Model Context Protocol.
Install
No install needed — the recommended way is to run it on demand with npx:
npx -y @anythink-cloud/mcp
Prefer a native binary on your PATH? Any of:
# Homebrew (bundled with the CLI — see Installation above)
brew install anythink-cloud/tap/anythink
# .NET global tool (requires the .NET 8 SDK)
dotnet tool install -g anythink-mcp
# Or download the anythink-mcp-<platform> binary from the Releases page
Configure
For Claude Code, register it in one command:
claude mcp add anythink -- npx -y @anythink-cloud/mcp
Or add it to your MCP client config manually (e.g. .mcp.json):
{
"mcpServers": {
"anythink": {
"command": "npx",
"args": ["-y", "@anythink-cloud/mcp"]
}
}
}
To pin a profile, add it to args: ["-y", "@anythink-cloud/mcp", "--profile", "my-project"]
Works in any MCP client. Most use the same mcpServers JSON shown above — just add it to the client's config file:
| Client | Config file |
|---|---|
| Claude Code | claude mcp add anythink -- npx -y @anythink-cloud/mcp (or .mcp.json) |
| Claude Desktop | claude_desktop_config.json (Settings → Developer → Edit Config) |
| Cursor | ~/.cursor/mcp.json (or the Add to Cursor button above) |
| VS Code | .vscode/mcp.json (or the Install in VS Code button above) |
| Cline | cline_mcp_settings.json (MCP Servers → Configure) |
| Windsurf | ~/.codeium/windsurf/mcp_config.json |
A couple of clients use a different config shape:
Continue (YAML — mcpServers is a list)
mcpServers:
- name: anythink
command: npx
args:
- -y
- "@anythink-cloud/mcp"
Zed (uses context_servers, not mcpServers)
{
"context_servers": {
"anythink": {
"source": "custom",
"command": "npx",
"args": ["-y", "@anythink-cloud/mcp"]
}
}
}
(Using a native binary instead of npx? Use "command": "anythink-mcp" with no args.)
Once connected, run the login tool, then accounts_use / projects_use to pick your working context.
Available tools
The MCP server provides dedicated tools for authentication, account/project management, and configuration — plus a generic cli tool that can run any CLI command:
| Tool | Description |
|---|---|
signup |
Create a new Anythink account |
login |
Log in with email and password |
login_direct |
Store credentials directly (org ID + API key or JWT) |
logout |
Remove a saved profile |
config_show |
List all profiles |
config_use |
Switch active profile |
config_remove |
Remove a profile |
accounts_list |
List billing accounts |
accounts_create |
Create a billing account |
accounts_use |
Set the active billing account |
projects_list |
List projects |
projects_create |
Create a project |
projects_use |
Connect to a project |
projects_delete |
Delete a project |
cli |
Run any CLI command (entities, data, workflows, roles, etc.) |
Contributing
Prerequisites
- .NET 8 SDK
- An Anythink account (free tier works)
Setup
git clone https://github.com/anythink-cloud/anythink-cli
cd anythink-cli
dotnet build
Running locally
dotnet run -- --help
dotnet run -- projects list
dotnet run -- entities list
Releases
Releases are automated via GitHub Actions. Push a version tag to trigger a build:
git tag v1.2.0
git push origin v1.2.0
The workflow builds self-contained binaries for macOS (arm64, x64) and Linux (x64, arm64), computes SHA256 checksums, and publishes them as a GitHub release.
Project structure
anythink-cli/
├── src/ # CLI source
│ ├── Commands/ # Command implementations (signup, login, etc)
│ ├── Config/ # CliConfig.cs, Profile, ConfigService
│ ├── Models/ # ApiModels.cs, BillingModels.cs
│ ├── Client/ # HttpApiClient.cs, AnythinkClient.cs, BillingClient.cs
│ ├── Output/ # Renderer.cs (Spectre.Console helpers)
│ └── Program.cs # Application entry point & .env loader
├── mcp/ # MCP server source
│ ├── Tools/ # MCP tool implementations
│ ├── McpClientFactory.cs # Auth + client resolution
│ └── Program.cs # MCP server entry point
├── tests/ # CLI unit tests
├── mcp-tests/ # MCP unit tests
├── AnythinkCli.sln # Solution file
└── .gitignore
License
MIT — see LICENSE. This covers the Anythink CLI and MCP server source in this repository; it does not grant rights to the Anythink platform, APIs, or services, which are governed by separate terms at anythink.cloud.
Built with Spectre.Console · Powered by Anythink
| 1 | <picture> |
| 2 | <source media="(prefers-color-scheme: dark)" srcset="assets/anythink-logo-dark.svg"> |
| 3 | <img alt="Anythink" src="assets/anythink-logo.svg" height="40"> |
| 4 | </picture> |
| 5 | |
| 6 | # Anythink CLI |
| 7 | |
| 8 | The official command-line interface for [Anythink] — the headless backend platform for developers and founders. Manage your projects, entities, data, workflows, users, files, and payments without leaving the terminal. |
| 9 | |
| 10 | [![NuGet]](https://www.nuget.org/packages/anythink-mcp) |
| 11 | [![Release]](https://github.com/anythink-cloud/anythink-cli/releases/latest) |
| 12 | [![Homebrew]](https://github.com/anythink-cloud/homebrew-tap) |
| 13 | [![MCP Registry]](https://registry.modelcontextprotocol.io) |
| 14 | [![License: MIT]](LICENSE) |
| 15 | |
| 16 | |
| 17 | ░███ ░██ ░██ ░██ ░██ |
| 18 | ░██░██ ░██ ░██ ░██ |
| 19 | ░██ ░██ ░████████ ░██ ░██ ░████████ ░████████ ░██░████████ ░██ ░██ |
| 20 | ░█████████ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██░██ ░██ ░██ ░██ |
| 21 | ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██░██ ░██ ░███████ |
| 22 | ░██ ░██ ░██ ░██ ░██ ░███ ░██ ░██ ░██ ░██░██ ░██ ░██ ░██ |
| 23 | ░██ ░██ ░██ ░██ ░█████░██ ░████ ░██ ░██ ░██░██ ░██ ░██ ░██ |
| 24 | ░██ |
| 25 | ░███████ |
| 26 | |
| 27 | |
| 28 | |
| 29 | |
| 30 | ## Contents |
| 31 | |
| 32 | [Installation] |
| 33 | [Getting started] |
| 34 | [Command reference] |
| 35 | [signup / login / logout] |
| 36 | [accounts] |
| 37 | [projects] |
| 38 | [config] |
| 39 | [entities] |
| 40 | [fields] |
| 41 | [data] |
| 42 | [search] |
| 43 | [workflows] |
| 44 | [users] |
| 45 | [files] |
| 46 | [roles] |
| 47 | [api-keys] |
| 48 | [menus] |
| 49 | [integrations] |
| 50 | [pay] |
| 51 | [oauth] |
| 52 | [api] |
| 53 | [docs] |
| 54 | [migrate] |
| 55 | [plans] |
| 56 | [MCP server] |
| 57 | [Contributing] |
| 58 | [License] |
| 59 | |
| 60 | |
| 61 | |
| 62 | ## Installation |
| 63 | |
| 64 | Both the `anythink` CLI and the `anythink-mcp` server are distributed together. The quickest way to get both is Homebrew. |
| 65 | |
| 66 | ### Homebrew (macOS / Linux) — recommended |
| 67 | |
| 68 | |
| 69 | brew install anythink-cloud/tap/anythink |
| 70 | |
| 71 | |
| 72 | This installs **both** commands onto your `PATH`: |
| 73 | |
| 74 | `anythink` — the CLI |
| 75 | `anythink-mcp` — the MCP server (see [MCP server]) |
| 76 | |
| 77 | Upgrade later with `brew upgrade anythink`. |
| 78 | |
| 79 | ### macOS / Linux — download binary |
| 80 | |
| 81 | Grab the latest release for your platform from the [Releases] page: |
| 82 | |
| 83 | | Platform | Binary | |
| 84 | | --------------------- | ---------------------- | |
| 85 | | macOS (Apple Silicon) | `anythink-osx-arm64` | |
| 86 | | macOS (Intel) | `anythink-osx-x64` | |
| 87 | | Linux (x86_64) | `anythink-linux-x64` | |
| 88 | | Linux (ARM64) | `anythink-linux-arm64` | |
| 89 | |
| 90 | |
| 91 | # Example — macOS Apple Silicon |
| 92 | curl -Lo anythink https://github.com/anythink-cloud/anythink-cli/releases/latest/download/anythink-osx-arm64 |
| 93 | chmod +x anythink |
| 94 | sudo mv anythink /usr/local/bin/ |
| 95 | |
| 96 | |
| 97 | The MCP server ships as a matching `anythink-mcp-<platform>` binary on the same release — download and install it the same way (e.g. `anythink-mcp-osx-arm64`). |
| 98 | |
| 99 | Verify the download against `checksums.txt` in the release assets: |
| 100 | |
| 101 | |
| 102 | sha256sum -c checksums.txt --ignore-missing |
| 103 | |
| 104 | |
| 105 | ### .NET global tool |
| 106 | |
| 107 | If you have the [.NET 8 SDK] installed: |
| 108 | |
| 109 | |
| 110 | dotnet tool install --global anythink-cli |
| 111 | |
| 112 | |
| 113 | ### Build from source |
| 114 | |
| 115 | |
| 116 | git clone https://github.com/anythink-cloud/anythink-cli |
| 117 | cd anythink-cli |
| 118 | dotnet build |
| 119 | dotnet run -- --help |
| 120 | |
| 121 | |
| 122 | |
| 123 | |
| 124 | ## Getting started |
| 125 | |
| 126 | |
| 127 | # 1. Create an account (or log in if you already have one) |
| 128 | anythink signup |
| 129 | |
| 130 | # 2. Create a billing account |
| 131 | anythink accounts create --name "My Company" |
| 132 | |
| 133 | # 3. Create a project |
| 134 | anythink projects create "My App" --region lon1 |
| 135 | |
| 136 | # 4. Connect to the project |
| 137 | anythink projects use <project-id> |
| 138 | |
| 139 | # 5. Start building |
| 140 | anythink entities list |
| 141 | anythink workflows list |
| 142 | |
| 143 | |
| 144 | Your credentials and project profiles are stored in `~/.anythink/config.json`. You can manage multiple projects by running `projects use` to switch between them. |
| 145 | |
| 146 | |
| 147 | |
| 148 | ## Command reference |
| 149 | |
| 150 | ### signup / login / logout |
| 151 | |
| 152 | |
| 153 | anythink signup Create a new Anythink account |
| 154 | anythink login Log in to the platform |
| 155 | anythink logout Remove saved credentials for a project profile |
| 156 | |
| 157 | |
| 158 | `signup` and `login` are interactive — they prompt for email and password and walk you through connecting to a billing account and project on first run. |
| 159 | |
| 160 | |
| 161 | |
| 162 | ### accounts |
| 163 | |
| 164 | Manage billing accounts. A billing account is the container for one or more projects and holds your subscription and payment details. |
| 165 | |
| 166 | |
| 167 | anythink accounts list List your billing accounts |
| 168 | anythink accounts create Create a new billing account |
| 169 | anythink accounts use <id> Set the active billing account |
| 170 | |
| 171 | |
| 172 | **Examples** |
| 173 | |
| 174 | |
| 175 | anythink accounts create --name "Acme Ltd" --email [email protected] |
| 176 | anythink accounts use a1b2c3d4 |
| 177 | |
| 178 | |
| 179 | |
| 180 | |
| 181 | ### projects |
| 182 | |
| 183 | Create and manage Anythink projects. Each project is an isolated backend instance with its own database, auth, files, and workflows. |
| 184 | |
| 185 | |
| 186 | anythink projects list List projects in the active billing account |
| 187 | anythink projects create <name> Create a new project |
| 188 | anythink projects use <id> Connect to a project (sets it as the active profile) |
| 189 | anythink projects delete <id> Delete a project |
| 190 | |
| 191 | |
| 192 | **Options — `projects create`** |
| 193 | |
| 194 | | Flag | Description | |
| 195 | | --------------- | ------------------------------- | |
| 196 | | `--region <id>` | Deployment region (e.g. `lon1`) | |
| 197 | | `--plan <id>` | Plan ID (see `anythink plans`) | |
| 198 | |
| 199 | **Examples** |
| 200 | |
| 201 | |
| 202 | anythink projects create "My App" --region lon1 |
| 203 | anythink projects use a1b2c3d4 |
| 204 | anythink projects delete a1b2c3d4 --yes |
| 205 | |
| 206 | |
| 207 | |
| 208 | |
| 209 | ### config |
| 210 | |
| 211 | View and manage saved CLI profiles. |
| 212 | |
| 213 | |
| 214 | anythink config show List all profiles and platform settings |
| 215 | anythink config use <profile> Set the active project profile |
| 216 | anythink config remove <profile> Remove a profile |
| 217 | |
| 218 | |
| 219 | Profiles are named by project alias or ID and stored in `~/.anythink/config.json`. |
| 220 | |
| 221 | |
| 222 | |
| 223 | ### entities |
| 224 | |
| 225 | Manage entities (database tables) in the active project. |
| 226 | |
| 227 | |
| 228 | anythink entities list List all entities |
| 229 | anythink entities get <name> Get entity details and fields |
| 230 | anythink entities create <name> Create a new entity |
| 231 | anythink entities update <name> Update entity settings |
| 232 | anythink entities delete <name> Delete an entity and all its data |
| 233 | |
| 234 | |
| 235 | **Options — `entities create`** |
| 236 | |
| 237 | | Flag | Description | |
| 238 | | ------------ | ------------------------------------------ | |
| 239 | | `--rls` | Enable row-level security | |
| 240 | | `--public` | Make the entity publicly readable | |
| 241 | | `--lock` | Lock new records (prevent direct creation) | |
| 242 | | `--junction` | Mark as a junction (many-to-many) table | |
| 243 | |
| 244 | **Examples** |
| 245 | |
| 246 | |
| 247 | anythink entities create orders --rls |
| 248 | anythink entities get customers |
| 249 | anythink entities delete temp_data --yes |
| 250 | |
| 251 | |
| 252 | |
| 253 | |
| 254 | ### fields |
| 255 | |
| 256 | Manage fields on an entity. Fields map directly to database columns. |
| 257 | |
| 258 | |
| 259 | anythink fields list <entity> List fields on an entity |
| 260 | anythink fields add <entity> <name> Add a field |
| 261 | anythink fields delete <entity> <id> Delete a field |
| 262 | |
| 263 | |
| 264 | **Options — `fields add`** |
| 265 | |
| 266 | | Flag | Description | |
| 267 | | ------------------- | --------------------------------------------------------------------------------- | |
| 268 | | `--type <type>` | Field type: `varchar`, `text`, `int`, `float`, `bool`, `datetime`, `json`, `uuid` | |
| 269 | | `--required` | Mark the field as required | |
| 270 | | `--unique` | Enforce a unique constraint | |
| 271 | | `--indexed` | Add a database index | |
| 272 | | `--default <value>` | Default value | |
| 273 | |
| 274 | **Examples** |
| 275 | |
| 276 | |
| 277 | anythink fields list customers |
| 278 | anythink fields add customers email --type varchar --unique --required |
| 279 | anythink fields add products price --type float --required |
| 280 | anythink fields delete customers 1234 --yes |
| 281 | |
| 282 | |
| 283 | |
| 284 | |
| 285 | ### data |
| 286 | |
| 287 | CRUD operations on entity records. |
| 288 | |
| 289 | |
| 290 | anythink data list <entity> List records |
| 291 | anythink data get <entity> <id> Get a single record by ID |
| 292 | anythink data create <entity> Create a new record |
| 293 | anythink data update <entity> <id> Update a record |
| 294 | anythink data delete <entity> <id> Delete a record |
| 295 | |
| 296 | |
| 297 | **Options — `data list`** |
| 298 | |
| 299 | | Flag | Description | |
| 300 | | ----------------- | ---------------------------------------------------------------------------------- | |
| 301 | | `--limit <n>` | Records per page (default: 20) | |
| 302 | | `--page <n>` | Page number (default: 1) | |
| 303 | | `--filter <expr>` | Field filters — JSON (`{"status":"draft","total":{"gte":10}}`) or `field=value` pairs (`status=draft&total=GTE:10`). See below. | |
| 304 | | `--json` | Output raw JSON instead of table | |
| 305 | | `--all` | Stream all pages as sequential JSON objects (requires `--json`, constant memory) | |
| 306 | |
| 307 | **Filter operators (JSON form)** — `{"field": value}` matches exactly, `{"field": [a, b]}` matches any, `{"field": null}` matches empty. For anything else use an operator object, e.g. `{"price": {"gte": 10, "lt": 100}}`: |
| 308 | |
| 309 | | Operator | Meaning | `field=value` form | |
| 310 | | ------------------------------ | --------------------------- | ------------------ | |
| 311 | | `eq` / `ne` | Equal / not equal | `x=v` / `x=!v` | |
| 312 | | `gt` `gte` `lt` `lte` | Comparisons | `x=GT:v` … | |
| 313 | | `contains` / `not_contains` | Case-insensitive substring | `x=C:v` / `x=NC:v` | |
| 314 | | `starts_with` / `ends_with` | Case-insensitive prefix/suffix | `x=SW:v` / `x=EW:v` | |
| 315 | | `in` | Any of a list | `x=IN:a,b` | |
| 316 | | `null: true` / `null: false` | Empty / not empty | `x=NULL:` / `x=NNULL:` | |
| 317 | | `exists: true` / `exists: false` | Has / lacks related records | `x=EXISTS:` / `x=NOT_EXISTS:` | |
| 318 | |
| 319 | **Options — `data create` / `data update`** |
| 320 | |
| 321 | | Flag | Description | |
| 322 | | --------------- | --------------------------- | |
| 323 | | `--data <json>` | JSON object of field values | |
| 324 | |
| 325 | **Examples** |
| 326 | |
| 327 | |
| 328 | anythink data list blog_posts --limit 10 |
| 329 | anythink data get blog_posts 42 |
| 330 | anythink data create blog_posts --data '{"title":"Hello World","status":"draft"}' |
| 331 | anythink data update blog_posts 42 --data '{"status":"approved"}' |
| 332 | anythink data delete blog_posts 42 --yes |
| 333 | |
| 334 | |
| 335 | |
| 336 | |
| 337 | ### search |
| 338 | |
| 339 | Full-text search across your entities, plus index lifecycle management. |
| 340 | |
| 341 | |
| 342 | anythink search query <text> Run a search |
| 343 | anythink search similar <entity> <id> Find similar documents |
| 344 | anythink search rehydrate [<entity>] Rebuild the search index (admin) |
| 345 | anythink search purge [<entity>] Wipe the search index (admin) |
| 346 | anythink search audit <entity> Compare configured public-searchable fields |
| 347 | with what public search actually returns |
| 348 | |
| 349 | |
| 350 | **Options — `search query`** |
| 351 | |
| 352 | | Flag | Description | |
| 353 | | --------------------- | -------------------------------------------------------------------------------------- | |
| 354 | | `--entities <list>` | Comma-separated entity names. Default: all indexed entities. | |
| 355 | | `--filter <expr>` | Filter expression, e.g. `"status=published AND category=news"`. Supports `_geoRadius`. | |
| 356 | | `--sort <list>` | Comma-separated sort fields, e.g. `"created_at:desc,id:asc"`. | |
| 357 | | `--facet <fields>` | Comma-separated fields to compute facet counts on. | |
| 358 | | `--highlight` | Highlight matched terms in results. | |
| 359 | | `--page N` | Page number (default: 1). | |
| 360 | | `--limit N` | Results per page (1-100, default: 20). | |
| 361 | | `--public` | Use the unauthenticated `/search/public` endpoint (only public-marked fields). | |
| 362 | | `--json` | Print the raw response JSON. | |
| 363 | |
| 364 | **Index lifecycle** |
| 365 | |
| 366 | `rehydrate` and `purge` are admin operations on the search index: |
| 367 | |
| 368 | `search rehydrate` — rebuilds the index from the database (no data loss; just resyncs) |
| 369 | `search purge` — deletes the index (run `rehydrate` after to repopulate) |
| 370 | |
| 371 | Both confirm by default; pass `-y` / `--yes` to skip the prompt for automation. |
| 372 | |
| 373 | **`search audit` — public-search data leak check** |
| 374 | |
| 375 | Compares what the entity's schema *says* should be public-searchable (fields with `publicly_searchable=true` and the entity's own `is_public=true`) against what `/search/public` actually returns. Any field appearing in public results that isn't on the allowlist is reported as a leak. |
| 376 | |
| 377 | Exits with code 1 if a leak is detected — useful for CI/CD. |
| 378 | |
| 379 | **Examples** |
| 380 | |
| 381 | |
| 382 | # Browse everything |
| 383 | anythink search query "*" |
| 384 | |
| 385 | # Filtered search with sorting |
| 386 | anythink search query "anythink" --filter "status=published" --sort "created_at:desc" |
| 387 | |
| 388 | # Compare what public visitors see vs what's in the database |
| 389 | anythink search audit posts |
| 390 | anythink search audit users --query "alice" --sample 10 |
| 391 | |
| 392 | # Reindex after a schema change |
| 393 | anythink search rehydrate posts |
| 394 | anythink search rehydrate --yes # everything (admin) |
| 395 | |
| 396 | # Geo search (radius in metres) |
| 397 | anythink search query "*" --filter "_geoRadius(51.5074,-0.1278,5000)" |
| 398 | |
| 399 | |
| 400 | |
| 401 | |
| 402 | ### workflows |
| 403 | |
| 404 | Manage automation workflows. Workflows can be triggered on a cron schedule, when entities are created or updated, or manually. |
| 405 | |
| 406 | |
| 407 | anythink workflows list List all workflows |
| 408 | anythink workflows get <id> Get workflow details and steps |
| 409 | anythink workflows create <name> Create a new workflow |
| 410 | anythink workflows enable <id> Enable a workflow |
| 411 | anythink workflows disable <id> Disable a workflow |
| 412 | anythink workflows trigger <id> Manually trigger a workflow |
| 413 | anythink workflows delete <id> Delete a workflow |
| 414 | |
| 415 | |
| 416 | **Options — `workflows create`** |
| 417 | |
| 418 | | Flag | Description | |
| 419 | | ------------------ | ----------------------------------------------------------------- | |
| 420 | | `--trigger <type>` | Trigger type: `Timed`, `EntityCreated`, `EntityUpdated`, `Manual` | |
| 421 | | `--cron <expr>` | Cron expression (for `Timed` trigger, e.g. `0 6 * * *`) | |
| 422 | | `--entity <name>` | Entity name (for `EntityCreated` / `EntityUpdated` triggers) | |
| 423 | |
| 424 | **Examples** |
| 425 | |
| 426 | |
| 427 | anythink workflows create daily-sync --trigger Timed --cron "0 6 * * *" |
| 428 | anythink workflows trigger 76 |
| 429 | anythink workflows disable 83 |
| 430 | |
| 431 | |
| 432 | |
| 433 | |
| 434 | ### users |
| 435 | |
| 436 | Manage users in the active project. |
| 437 | |
| 438 | |
| 439 | anythink users list List all users |
| 440 | anythink users me Show the currently authenticated user |
| 441 | anythink users get <id> Get a user by ID |
| 442 | anythink users invite <email> <first> <last> Create a user and send an invitation email |
| 443 | anythink users delete <id> Delete a user |
| 444 | |
| 445 | |
| 446 | **Options — `users invite`** |
| 447 | |
| 448 | | Flag | Description | |
| 449 | | ---------------- | ----------------------------- | |
| 450 | | `--role-id <id>` | Assign a role to the new user | |
| 451 | |
| 452 | **Examples** |
| 453 | |
| 454 | |
| 455 | anythink users list |
| 456 | anythink users invite [email protected] Alice Smith --role-id 3 |
| 457 | anythink users delete 42 --yes |
| 458 | |
| 459 | |
| 460 | |
| 461 | |
| 462 | ### files |
| 463 | |
| 464 | Manage uploaded files in the active project. |
| 465 | |
| 466 | |
| 467 | anythink files list List uploaded files |
| 468 | anythink files get <id> Get file metadata by ID |
| 469 | anythink files upload <path> Upload a file |
| 470 | anythink files delete <id> Delete a file |
| 471 | |
| 472 | |
| 473 | **Options — `files list`** |
| 474 | |
| 475 | | Flag | Description | |
| 476 | | ------------- | ---------------------------- | |
| 477 | | `--page <n>` | Page number | |
| 478 | | `--limit <n>` | Files per page (default: 25) | |
| 479 | |
| 480 | **Options — `files upload`** |
| 481 | |
| 482 | | Flag | Description | |
| 483 | | ---------- | --------------------------------- | |
| 484 | | `--public` | Make the file publicly accessible | |
| 485 | |
| 486 | **Examples** |
| 487 | |
| 488 | |
| 489 | anythink files list |
| 490 | anythink files upload logo.png --public |
| 491 | anythink files upload export.csv |
| 492 | anythink files delete 12 --yes |
| 493 | |
| 494 | |
| 495 | |
| 496 | |
| 497 | ### roles |
| 498 | |
| 499 | Manage roles in the active project. Roles control what authenticated users can access. |
| 500 | |
| 501 | |
| 502 | anythink roles list List all roles |
| 503 | anythink roles create <name> Create a new role |
| 504 | anythink roles delete <id> Delete a role |
| 505 | |
| 506 | |
| 507 | **Options — `roles create`** |
| 508 | |
| 509 | | Flag | Description | |
| 510 | | ---------------------- | -------------------------------------- | |
| 511 | | `--description <text>` | Human-readable description of the role | |
| 512 | |
| 513 | **Examples** |
| 514 | |
| 515 | |
| 516 | anythink roles list |
| 517 | anythink roles create editor --description "Can edit content" |
| 518 | anythink roles delete 5 --yes |
| 519 | |
| 520 | |
| 521 | |
| 522 | |
| 523 | ### api-keys |
| 524 | |
| 525 | Issue and manage API keys for non-interactive access (CI pipelines, scripts, integrations). Each key is scoped to a permission set, has an expiry, and is tied to the user that created it. |
| 526 | |
| 527 | The raw key is shown **once** on creation and never retrievable — save it immediately or use `--save-as` to write it directly into a CLI profile. |
| 528 | |
| 529 | |
| 530 | anythink api-keys list List your API keys |
| 531 | anythink api-keys create <name> --permissions ... Create a new key |
| 532 | anythink api-keys revoke <id> Revoke a key |
| 533 | |
| 534 | |
| 535 | **Options — `api-keys create`** |
| 536 | |
| 537 | | Flag | Description | |
| 538 | | ----------------------- | ---------------------------------------------------------------------------- | |
| 539 | | `--permissions <list>` | Required. Comma-separated permission names, e.g. `data:read,data:create` | |
| 540 | | `--expires-in <days>` | Days until expiry (default: 90, max: 365) | |
| 541 | | `--no-expiry-cap` | Allow `--expires-in` greater than 365 days | |
| 542 | | `--save-as <profile>` | Save the new key directly to a CLI profile instead of printing it | |
| 543 | | `--json` | Print the response as JSON to stdout (the key is in this output — handle carefully) | |
| 544 | | `-y, --yes` | Skip the confirmation prompt | |
| 545 | |
| 546 | **Output behaviour** |
| 547 | |
| 548 | By default, the success message goes to **stdout** and the raw key goes to **stderr** on its own line. This makes it easy to capture only the key: |
| 549 | |
| 550 | |
| 551 | anythink api-keys create ci-deploy --permissions data:read --yes 2> key.txt |
| 552 | |
| 553 | |
| 554 | If the server drops any of the requested permissions because the current user does not hold them, the CLI surfaces a loud warning so you do not end up with a quietly under-scoped key. |
| 555 | |
| 556 | **Examples** |
| 557 | |
| 558 | |
| 559 | # Create a 90-day key for CI |
| 560 | anythink api-keys create github-actions --permissions "data:read,data:create" --yes 2> key.txt |
| 561 | |
| 562 | # Create a key and save it directly into a profile (key never echoes) |
| 563 | anythink api-keys create scraper --permissions data:read --save-as scraper-bot --yes |
| 564 | anythink --profile scraper-bot data list posts |
| 565 | |
| 566 | # Revoke a key |
| 567 | anythink api-keys revoke 42 --yes |
| 568 | |
| 569 | |
| 570 | |
| 571 | |
| 572 | ### menus |
| 573 | |
| 574 | Manage dashboard sidebar menus in the active project. Menus control what entities appear in the Anythink dashboard and how they are grouped. |
| 575 | |
| 576 | |
| 577 | anythink menus list List all menus with tree structure |
| 578 | anythink menus add-item <menu_id> <entity> Add an entity to a dashboard menu |
| 579 | |
| 580 | |
| 581 | **Options — `menus add-item`** |
| 582 | |
| 583 | | Flag | Description | |
| 584 | | ----------------- | ---------------------------------------------------- | |
| 585 | | `--icon <name>` | Lucide icon name (e.g. `MessageCircle`, `Target`) | |
| 586 | | `--name <text>` | Display name (defaults to entity name, title-cased) | |
| 587 | | `--parent <id>` | Parent menu item ID for nesting under a group | |
| 588 | |
| 589 | **Examples** |
| 590 | |
| 591 | |
| 592 | # List all menus and their items |
| 593 | anythink menus list |
| 594 | |
| 595 | # Add "Check-ins" under the Profiles group (parent 168) in admin menu (250) |
| 596 | anythink menus add-item 250 check_ins --icon MessageCircle --parent 168 |
| 597 | |
| 598 | # Add a top-level menu item |
| 599 | anythink menus add-item 250 badges --icon Award |
| 600 | |
| 601 | |
| 602 | |
| 603 | |
| 604 | ### integrations |
| 605 | |
| 606 | Manage integrations — both the catalog of available providers (Claude, OpenAI, Slack, Google, etc.) and the active connections that hold credentials for them. |
| 607 | |
| 608 | |
| 609 | anythink integrations list List available providers |
| 610 | anythink integrations get <provider> Show details and operations for one provider |
| 611 | anythink integrations connections list [--provider <p>] List your active connections |
| 612 | |
| 613 | anythink integrations connect <provider> Create an API-key connection (Claude, OpenAI, etc.) |
| 614 | anythink integrations oauth status <provider> Show OAuth client setup status |
| 615 | anythink integrations oauth configure <provider> Set the OAuth client ID + secret |
| 616 | anythink integrations oauth connect <provider> Connect via the browser OAuth flow |
| 617 | |
| 618 | anythink integrations test <connection-id> Test a connection |
| 619 | anythink integrations enable <connection-id> Enable a connection |
| 620 | anythink integrations disable <connection-id> Disable a connection |
| 621 | anythink integrations disconnect <connection-id> Delete a connection |
| 622 | |
| 623 | anythink integrations execute <provider> <operation> Run an operation on a connected provider |
| 624 | |
| 625 | |
| 626 | **API-key providers — `integrations connect`** |
| 627 | |
| 628 | | Flag | Description | |
| 629 | | -------------------- | ---------------------------------------------------------------------------------------- | |
| 630 | | `--api-key <key>` | API key for the provider. If omitted, you'll be prompted (input is hidden). | |
| 631 | | `--name <name>` | Friendly name for this connection (default: `<provider> connection`) | |
| 632 | | `--user-connection` | Make this a user-scoped connection (only the current user sees it). Default: tenant-wide. | |
| 633 | |
| 634 | **OAuth providers — `integrations oauth connect`** |
| 635 | |
| 636 | The CLI starts a local HTTP listener on `http://localhost:8745/callback`, opens your browser to the provider's authorisation URL, and exchanges the returned code for a connection — no copy/paste of auth codes required. |
| 637 | |
| 638 | | Flag | Description | |
| 639 | | -------------------- | ------------------------------------------------------------------------ | |
| 640 | | `--name <name>` | Friendly name for this connection | |
| 641 | | `--user-connection` | Make this a user-scoped connection | |
| 642 | | `--port <n>` | Local callback port (default: `8745`) | |
| 643 | | `--no-open` | Don't try to open the browser — just print the URL | |
| 644 | | `--timeout <secs>` | How long to wait for the callback (default: `300`) | |
| 645 | |
| 646 | OAuth credentials need to be set up once per provider before you can connect: |
| 647 | |
| 648 | |
| 649 | anythink integrations oauth configure slack # prompts for client_id + secret (hidden) |
| 650 | anythink integrations oauth connect slack --name main |
| 651 | |
| 652 | |
| 653 | **Running operations — `integrations execute`** |
| 654 | |
| 655 | | Flag | Description | |
| 656 | | ------------------- | ----------------------------------------------------------------------------------- | |
| 657 | | `--input <k=v>` | Input parameter as `key=value`. Repeatable. | |
| 658 | | `--inputs <json>` | All inputs as a JSON object. | |
| 659 | | `--json` | Print the full JSON response (default: just the `content` field if present). | |
| 660 | |
| 661 | **Examples** |
| 662 | |
| 663 | |
| 664 | # Browse what's available |
| 665 | anythink integrations list |
| 666 | anythink integrations get claude |
| 667 | |
| 668 | # API-key flow (Claude, OpenAI) |
| 669 | anythink integrations connect claude --name "main" |
| 670 | anythink integrations execute claude generate-text --input "prompt=Tell me a haiku" |
| 671 | |
| 672 | # OAuth flow (Slack, Google, GitHub) |
| 673 | anythink integrations oauth configure slack |
| 674 | anythink integrations oauth connect slack --name main |
| 675 | |
| 676 | # Manage connections |
| 677 | anythink integrations connections list |
| 678 | anythink integrations test <connection-id> |
| 679 | anythink integrations disable <connection-id> |
| 680 | anythink integrations disconnect <connection-id> --yes |
| 681 | |
| 682 | |
| 683 | |
| 684 | |
| 685 | ### pay |
| 686 | |
| 687 | Configure and manage Anythink Pay — the built-in Stripe Connect integration for accepting payments in your project. |
| 688 | |
| 689 | |
| 690 | anythink pay status Show Stripe Connect account status |
| 691 | anythink pay connect Set up a Stripe Connect account and start onboarding |
| 692 | anythink pay payments List recent payments |
| 693 | anythink pay methods List saved payment methods |
| 694 | |
| 695 | |
| 696 | **Options — `pay payments`** |
| 697 | |
| 698 | | Flag | Description | |
| 699 | | ------------- | ------------------------------- | |
| 700 | | `--page <n>` | Page number | |
| 701 | | `--limit <n>` | Payments per page (default: 25) | |
| 702 | |
| 703 | `pay connect` is interactive — it prompts for business type, country, and contact email, creates a Stripe Connect account, then opens the Stripe onboarding URL in your browser. |
| 704 | |
| 705 | **Examples** |
| 706 | |
| 707 | |
| 708 | anythink pay status |
| 709 | anythink pay connect |
| 710 | anythink pay payments --limit 50 |
| 711 | |
| 712 | |
| 713 | |
| 714 | |
| 715 | ### oauth |
| 716 | |
| 717 | Configure OAuth social sign-in providers for the active project. |
| 718 | |
| 719 | |
| 720 | anythink oauth google status Show Google OAuth configuration status |
| 721 | anythink oauth google configure Set Google OAuth client ID and secret |
| 722 | |
| 723 | |
| 724 | Google OAuth lets your project's users sign in with their Google account. You'll need a Google Cloud project with the OAuth 2.0 credentials created — see the [Google Cloud Console]. |
| 725 | |
| 726 | Set the authorised redirect URI in your Google Cloud credentials to: |
| 727 | |
| 728 | |
| 729 | https://api.my.anythink.cloud/org/<your-org-id>/auth/v1/google/callback |
| 730 | |
| 731 | |
| 732 | **Examples** |
| 733 | |
| 734 | |
| 735 | anythink oauth google status |
| 736 | anythink oauth google configure |
| 737 | |
| 738 | |
| 739 | |
| 740 | |
| 741 | ### api |
| 742 | |
| 743 | List all API endpoints available for the active project — both platform routes and the dynamically generated REST routes for your entities. |
| 744 | |
| 745 | |
| 746 | anythink api List all endpoints |
| 747 | anythink api --json Output as JSON (useful for AI tooling) |
| 748 | |
| 749 | |
| 750 | |
| 751 | |
| 752 | ### docs |
| 753 | |
| 754 | Print the full CLI reference. |
| 755 | |
| 756 | |
| 757 | anythink docs Print reference as markdown |
| 758 | anythink docs --json Print reference as JSON (for AI/tooling consumption) |
| 759 | |
| 760 | |
| 761 | |
| 762 | |
| 763 | ### migrate |
| 764 | |
| 765 | Copy the entity schema (entities + fields) from one project profile to another. Useful for promoting a schema from staging to production. |
| 766 | |
| 767 | |
| 768 | anythink migrate --from <profile> --to <profile> |
| 769 | |
| 770 | |
| 771 | **Options** |
| 772 | |
| 773 | | Flag | Description | |
| 774 | | ------------------ | -------------------------------------------------- | |
| 775 | | `--from <profile>` | Source profile name (required) | |
| 776 | | `--to <profile>` | Destination profile name (required) | |
| 777 | | `--dry-run` | Show what would be migrated without making changes | |
| 778 | |
| 779 | **Examples** |
| 780 | |
| 781 | |
| 782 | anythink migrate --from my-app-staging --to my-app-prod |
| 783 | anythink migrate --from my-app-staging --to my-app-prod --dry-run |
| 784 | |
| 785 | |
| 786 | |
| 787 | |
| 788 | ### plans |
| 789 | |
| 790 | List available Anythink plans. |
| 791 | |
| 792 | |
| 793 | anythink plans List plans |
| 794 | anythink plans --json Output as JSON |
| 795 | |
| 796 | |
| 797 | |
| 798 | |
| 799 | ## MCP server |
| 800 | |
| 801 | The Anythink MCP server exposes the platform to AI assistants (Claude, Cursor, etc.) via the [Model Context Protocol]. |
| 802 | |
| 803 | ### Install |
| 804 | |
| 805 | No install needed — the recommended way is to run it on demand with `npx`: |
| 806 | |
| 807 | |
| 808 | npx -y @anythink-cloud/mcp |
| 809 | |
| 810 | |
| 811 | Prefer a native binary on your `PATH`? Any of: |
| 812 | |
| 813 | |
| 814 | # Homebrew (bundled with the CLI — see Installation above) |
| 815 | brew install anythink-cloud/tap/anythink |
| 816 | |
| 817 | # .NET global tool (requires the .NET 8 SDK) |
| 818 | dotnet tool install -g anythink-mcp |
| 819 | |
| 820 | # Or download the anythink-mcp-<platform> binary from the Releases page |
| 821 | |
| 822 | |
| 823 | ### Configure |
| 824 | |
| 825 | [![Add to Cursor]](https://cursor.com/en/install-mcp?name=anythink&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBhbnl0aGluay1jbG91ZC9tY3AiXX0%3D) |
| 826 | [![Install in VS Code]](https://insiders.vscode.dev/redirect/mcp/install?name=anythink&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40anythink-cloud%2Fmcp%22%5D%7D) |
| 827 | |
| 828 | For **Claude Code**, register it in one command: |
| 829 | |
| 830 | |
| 831 | claude mcp add anythink -- npx -y @anythink-cloud/mcp |
| 832 | |
| 833 | |
| 834 | Or add it to your MCP client config manually (e.g. `.mcp.json`): |
| 835 | |
| 836 | |
| 837 | { |
| 838 | "mcpServers": { |
| 839 | "anythink": { |
| 840 | "command": "npx", |
| 841 | "args": ["-y", "@anythink-cloud/mcp"] |
| 842 | } |
| 843 | } |
| 844 | } |
| 845 | |
| 846 | |
| 847 | To pin a profile, add it to `args`: `["-y", "@anythink-cloud/mcp", "--profile", "my-project"]` |
| 848 | |
| 849 | Works in any MCP client. Most use the same `mcpServers` JSON shown above — just add it to the client's config file: |
| 850 | |
| 851 | | Client | Config file | |
| 852 | | --- | --- | |
| 853 | | Claude Code | `claude mcp add anythink -- npx -y @anythink-cloud/mcp` (or `.mcp.json`) | |
| 854 | | Claude Desktop | `claude_desktop_config.json` (Settings → Developer → Edit Config) | |
| 855 | | Cursor | `~/.cursor/mcp.json` (or the **Add to Cursor** button above) | |
| 856 | | VS Code | `.vscode/mcp.json` (or the **Install in VS Code** button above) | |
| 857 | | Cline | `cline_mcp_settings.json` (MCP Servers → Configure) | |
| 858 | | Windsurf | `~/.codeium/windsurf/mcp_config.json` | |
| 859 | |
| 860 | A couple of clients use a different config shape: |
| 861 | |
| 862 | <details> |
| 863 | <summary><strong>Continue</strong> (YAML — <code>mcpServers</code> is a list)</summary> |
| 864 | |
| 865 | |
| 866 | mcpServers: |
| 867 | - name: anythink |
| 868 | command: npx |
| 869 | args: |
| 870 | - -y |
| 871 | - "@anythink-cloud/mcp" |
| 872 | |
| 873 | </details> |
| 874 | |
| 875 | <details> |
| 876 | <summary><strong>Zed</strong> (uses <code>context_servers</code>, not <code>mcpServers</code>)</summary> |
| 877 | |
| 878 | |
| 879 | { |
| 880 | "context_servers": { |
| 881 | "anythink": { |
| 882 | "source": "custom", |
| 883 | "command": "npx", |
| 884 | "args": ["-y", "@anythink-cloud/mcp"] |
| 885 | } |
| 886 | } |
| 887 | } |
| 888 | |
| 889 | </details> |
| 890 | |
| 891 | (Using a native binary instead of `npx`? Use `"command": "anythink-mcp"` with no `args`.) |
| 892 | |
| 893 | Once connected, run the `login` tool, then `accounts_use` / `projects_use` to pick your working context. |
| 894 | |
| 895 | ### Available tools |
| 896 | |
| 897 | The MCP server provides dedicated tools for authentication, account/project management, and configuration — plus a generic `cli` tool that can run any CLI command: |
| 898 | |
| 899 | | Tool | Description | |
| 900 | | --- | --- | |
| 901 | | `signup` | Create a new Anythink account | |
| 902 | | `login` | Log in with email and password | |
| 903 | | `login_direct` | Store credentials directly (org ID + API key or JWT) | |
| 904 | | `logout` | Remove a saved profile | |
| 905 | | `config_show` | List all profiles | |
| 906 | | `config_use` | Switch active profile | |
| 907 | | `config_remove` | Remove a profile | |
| 908 | | `accounts_list` | List billing accounts | |
| 909 | | `accounts_create` | Create a billing account | |
| 910 | | `accounts_use` | Set the active billing account | |
| 911 | | `projects_list` | List projects | |
| 912 | | `projects_create` | Create a project | |
| 913 | | `projects_use` | Connect to a project | |
| 914 | | `projects_delete` | Delete a project | |
| 915 | | `cli` | Run any CLI command (entities, data, workflows, roles, etc.) | |
| 916 | |
| 917 | |
| 918 | |
| 919 | ## Contributing |
| 920 | |
| 921 | ### Prerequisites |
| 922 | |
| 923 | [.NET 8 SDK] |
| 924 | An Anythink account (free tier works) |
| 925 | |
| 926 | ### Setup |
| 927 | |
| 928 | |
| 929 | git clone https://github.com/anythink-cloud/anythink-cli |
| 930 | cd anythink-cli |
| 931 | dotnet build |
| 932 | |
| 933 | |
| 934 | ### Running locally |
| 935 | |
| 936 | |
| 937 | dotnet run -- --help |
| 938 | dotnet run -- projects list |
| 939 | dotnet run -- entities list |
| 940 | |
| 941 | |
| 942 | |
| 943 | ### Releases |
| 944 | |
| 945 | Releases are automated via GitHub Actions. Push a version tag to trigger a build: |
| 946 | |
| 947 | |
| 948 | git tag v1.2.0 |
| 949 | git push origin v1.2.0 |
| 950 | |
| 951 | |
| 952 | The workflow builds self-contained binaries for macOS (arm64, x64) and Linux (x64, arm64), computes SHA256 checksums, and publishes them as a GitHub release. |
| 953 | |
| 954 | ### Project structure |
| 955 | |
| 956 | |
| 957 | anythink-cli/ |
| 958 | ├── src/ # CLI source |
| 959 | │ ├── Commands/ # Command implementations (signup, login, etc) |
| 960 | │ ├── Config/ # CliConfig.cs, Profile, ConfigService |
| 961 | │ ├── Models/ # ApiModels.cs, BillingModels.cs |
| 962 | │ ├── Client/ # HttpApiClient.cs, AnythinkClient.cs, BillingClient.cs |
| 963 | │ ├── Output/ # Renderer.cs (Spectre.Console helpers) |
| 964 | │ └── Program.cs # Application entry point & .env loader |
| 965 | ├── mcp/ # MCP server source |
| 966 | │ ├── Tools/ # MCP tool implementations |
| 967 | │ ├── McpClientFactory.cs # Auth + client resolution |
| 968 | │ └── Program.cs # MCP server entry point |
| 969 | ├── tests/ # CLI unit tests |
| 970 | ├── mcp-tests/ # MCP unit tests |
| 971 | ├── AnythinkCli.sln # Solution file |
| 972 | └── .gitignore |
| 973 | |
| 974 | |
| 975 | |
| 976 | |
| 977 | ## License |
| 978 | |
| 979 | MIT — see [LICENSE]. This covers the Anythink CLI and MCP server source in this repository; it does not grant rights to the Anythink platform, APIs, or services, which are governed by separate terms at [anythink.cloud]. |
| 980 | |
| 981 | |
| 982 | |
| 983 | Built with [Spectre.Console] · Powered by [Anythink] |
| 984 |
Discussion
Alternatives
Browse more free AI agents or everything in Development.