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/main1 file
README.md
Show the full text984 lines
Anythink

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.

NuGet Release Homebrew MCP Registry License: MIT

   ░███                             ░██    ░██        ░██           ░██
  ░██░██                            ░██    ░██                      ░██
 ░██  ░██  ░████████  ░██    ░██ ░████████ ░████████  ░██░████████  ░██    ░██
░█████████ ░██    ░██ ░██    ░██    ░██    ░██    ░██ ░██░██    ░██ ░██   ░██
░██    ░██ ░██    ░██ ░██    ░██    ░██    ░██    ░██ ░██░██    ░██ ░███████
░██    ░██ ░██    ░██ ░██   ░███    ░██    ░██    ░██ ░██░██    ░██ ░██   ░██
░██    ░██ ░██    ░██  ░█████░██     ░████ ░██    ░██ ░██░██    ░██ ░██    ░██
                             ░██
                       ░███████

Contents


Installation

Both the anythink CLI and the anythink-mcp server are distributed together. The quickest way to get both is Homebrew.

brew install anythink-cloud/tap/anythink

This installs both commands onto your PATH:

  • anythink — the CLI
  • anythink-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

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 (run rehydrate after 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

Add to Cursor Install in VS Code

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 
8The official command-line interface for [Anythink](https://anythink.cloud) — 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://img.shields.io/nuget/v/anythink-mcp?logo=nuget&label=anythink-mcp)](https://www.nuget.org/packages/anythink-mcp)
11[![Release](https://img.shields.io/github/v/release/anythink-cloud/anythink-cli?logo=github&label=release)](https://github.com/anythink-cloud/anythink-cli/releases/latest)
12[![Homebrew](https://img.shields.io/badge/homebrew-anythink--cloud%2Ftap-F9A825?logo=homebrew&logoColor=white)](https://github.com/anythink-cloud/homebrew-tap)
13[![MCP Registry](https://img.shields.io/badge/MCP_registry-cloud.anythink%2Fanythink-0098FF)](https://registry.modelcontextprotocol.io)
14[![License: MIT](https://img.shields.io/badge/license-MIT-green)](LICENSE)
15 
16```
17 ░███ ░██ ░██ ░██ ░██
18 ░██░██ ░██ ░██ ░██
19 ░██ ░██ ░████████ ░██ ░██ ░████████ ░████████ ░██░████████ ░██ ░██
20░█████████ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██░██ ░██ ░██ ░██
21░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██░██ ░██ ░███████
22░██ ░██ ░██ ░██ ░██ ░███ ░██ ░██ ░██ ░██░██ ░██ ░██ ░██
23░██ ░██ ░██ ░██ ░█████░██ ░████ ░██ ░██ ░██░██ ░██ ░██ ░██
24 ░██
25 ░███████
26```
27 
28---
29 
30## Contents
31 
32- [Installation](#installation)
33- [Getting started](#getting-started)
34- [Command reference](#command-reference)
35 - [signup / login / logout](#signup--login--logout)
36 - [accounts](#accounts)
37 - [projects](#projects)
38 - [config](#config)
39 - [entities](#entities)
40 - [fields](#fields)
41 - [data](#data)
42 - [search](#search)
43 - [workflows](#workflows)
44 - [users](#users)
45 - [files](#files)
46 - [roles](#roles)
47 - [api-keys](#api-keys)
48 - [menus](#menus)
49 - [integrations](#integrations)
50 - [pay](#pay)
51 - [oauth](#oauth)
52 - [api](#api)
53 - [docs](#docs)
54 - [migrate](#migrate)
55 - [plans](#plans)
56- [MCP server](#mcp-server)
57- [Contributing](#contributing)
58- [License](#license)
59 
60---
61 
62## Installation
63 
64Both 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```bash
69brew install anythink-cloud/tap/anythink
70```
71 
72This installs **both** commands onto your `PATH`:
73 
74- `anythink` — the CLI
75- `anythink-mcp` — the MCP server (see [MCP server](#mcp-server))
76 
77Upgrade later with `brew upgrade anythink`.
78 
79### macOS / Linux — download binary
80 
81Grab the latest release for your platform from the [Releases](https://github.com/anythink-cloud/anythink-cli/releases/latest) 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```bash
91# Example — macOS Apple Silicon
92curl -Lo anythink https://github.com/anythink-cloud/anythink-cli/releases/latest/download/anythink-osx-arm64
93chmod +x anythink
94sudo mv anythink /usr/local/bin/
95```
96 
97The 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 
99Verify the download against `checksums.txt` in the release assets:
100 
101```bash
102sha256sum -c checksums.txt --ignore-missing
103```
104 
105### .NET global tool
106 
107If you have the [.NET 8 SDK](https://dotnet.microsoft.com/download) installed:
108 
109```bash
110dotnet tool install --global anythink-cli
111```
112 
113### Build from source
114 
115```bash
116git clone https://github.com/anythink-cloud/anythink-cli
117cd anythink-cli
118dotnet build
119dotnet run -- --help
120```
121 
122---
123 
124## Getting started
125 
126```bash
127# 1. Create an account (or log in if you already have one)
128anythink signup
129 
130# 2. Create a billing account
131anythink accounts create --name "My Company"
132 
133# 3. Create a project
134anythink projects create "My App" --region lon1
135 
136# 4. Connect to the project
137anythink projects use <project-id>
138 
139# 5. Start building
140anythink entities list
141anythink workflows list
142```
143 
144Your 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```
153anythink signup Create a new Anythink account
154anythink login Log in to the platform
155anythink 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 
164Manage billing accounts. A billing account is the container for one or more projects and holds your subscription and payment details.
165 
166```
167anythink accounts list List your billing accounts
168anythink accounts create Create a new billing account
169anythink accounts use <id> Set the active billing account
170```
171 
172**Examples**
173 
174```bash
175anythink accounts create --name "Acme Ltd" --email [email protected]
176anythink accounts use a1b2c3d4
177```
178 
179---
180 
181### projects
182 
183Create and manage Anythink projects. Each project is an isolated backend instance with its own database, auth, files, and workflows.
184 
185```
186anythink projects list List projects in the active billing account
187anythink projects create <name> Create a new project
188anythink projects use <id> Connect to a project (sets it as the active profile)
189anythink 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```bash
202anythink projects create "My App" --region lon1
203anythink projects use a1b2c3d4
204anythink projects delete a1b2c3d4 --yes
205```
206 
207---
208 
209### config
210 
211View and manage saved CLI profiles.
212 
213```
214anythink config show List all profiles and platform settings
215anythink config use <profile> Set the active project profile
216anythink config remove <profile> Remove a profile
217```
218 
219Profiles are named by project alias or ID and stored in `~/.anythink/config.json`.
220 
221---
222 
223### entities
224 
225Manage entities (database tables) in the active project.
226 
227```
228anythink entities list List all entities
229anythink entities get <name> Get entity details and fields
230anythink entities create <name> Create a new entity
231anythink entities update <name> Update entity settings
232anythink 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```bash
247anythink entities create orders --rls
248anythink entities get customers
249anythink entities delete temp_data --yes
250```
251 
252---
253 
254### fields
255 
256Manage fields on an entity. Fields map directly to database columns.
257 
258```
259anythink fields list <entity> List fields on an entity
260anythink fields add <entity> <name> Add a field
261anythink 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```bash
277anythink fields list customers
278anythink fields add customers email --type varchar --unique --required
279anythink fields add products price --type float --required
280anythink fields delete customers 1234 --yes
281```
282 
283---
284 
285### data
286 
287CRUD operations on entity records.
288 
289```
290anythink data list <entity> List records
291anythink data get <entity> <id> Get a single record by ID
292anythink data create <entity> Create a new record
293anythink data update <entity> <id> Update a record
294anythink 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```bash
328anythink data list blog_posts --limit 10
329anythink data get blog_posts 42
330anythink data create blog_posts --data '{"title":"Hello World","status":"draft"}'
331anythink data update blog_posts 42 --data '{"status":"approved"}'
332anythink data delete blog_posts 42 --yes
333```
334 
335---
336 
337### search
338 
339Full-text search across your entities, plus index lifecycle management.
340 
341```
342anythink search query <text> Run a search
343anythink search similar <entity> <id> Find similar documents
344anythink search rehydrate [<entity>] Rebuild the search index (admin)
345anythink search purge [<entity>] Wipe the search index (admin)
346anythink 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 
371Both confirm by default; pass `-y` / `--yes` to skip the prompt for automation.
372 
373**`search audit` — public-search data leak check**
374 
375Compares 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 
377Exits with code 1 if a leak is detected — useful for CI/CD.
378 
379**Examples**
380 
381```bash
382# Browse everything
383anythink search query "*"
384 
385# Filtered search with sorting
386anythink search query "anythink" --filter "status=published" --sort "created_at:desc"
387 
388# Compare what public visitors see vs what's in the database
389anythink search audit posts
390anythink search audit users --query "alice" --sample 10
391 
392# Reindex after a schema change
393anythink search rehydrate posts
394anythink search rehydrate --yes # everything (admin)
395 
396# Geo search (radius in metres)
397anythink search query "*" --filter "_geoRadius(51.5074,-0.1278,5000)"
398```
399 
400---
401 
402### workflows
403 
404Manage automation workflows. Workflows can be triggered on a cron schedule, when entities are created or updated, or manually.
405 
406```
407anythink workflows list List all workflows
408anythink workflows get <id> Get workflow details and steps
409anythink workflows create <name> Create a new workflow
410anythink workflows enable <id> Enable a workflow
411anythink workflows disable <id> Disable a workflow
412anythink workflows trigger <id> Manually trigger a workflow
413anythink 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```bash
427anythink workflows create daily-sync --trigger Timed --cron "0 6 * * *"
428anythink workflows trigger 76
429anythink workflows disable 83
430```
431 
432---
433 
434### users
435 
436Manage users in the active project.
437 
438```
439anythink users list List all users
440anythink users me Show the currently authenticated user
441anythink users get <id> Get a user by ID
442anythink users invite <email> <first> <last> Create a user and send an invitation email
443anythink 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```bash
455anythink users list
456anythink users invite [email protected] Alice Smith --role-id 3
457anythink users delete 42 --yes
458```
459 
460---
461 
462### files
463 
464Manage uploaded files in the active project.
465 
466```
467anythink files list List uploaded files
468anythink files get <id> Get file metadata by ID
469anythink files upload <path> Upload a file
470anythink 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```bash
489anythink files list
490anythink files upload logo.png --public
491anythink files upload export.csv
492anythink files delete 12 --yes
493```
494 
495---
496 
497### roles
498 
499Manage roles in the active project. Roles control what authenticated users can access.
500 
501```
502anythink roles list List all roles
503anythink roles create <name> Create a new role
504anythink 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```bash
516anythink roles list
517anythink roles create editor --description "Can edit content"
518anythink roles delete 5 --yes
519```
520 
521---
522 
523### api-keys
524 
525Issue 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 
527The 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```
530anythink api-keys list List your API keys
531anythink api-keys create <name> --permissions ... Create a new key
532anythink 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 
548By 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```bash
551anythink api-keys create ci-deploy --permissions data:read --yes 2> key.txt
552```
553 
554If 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```bash
559# Create a 90-day key for CI
560anythink 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)
563anythink api-keys create scraper --permissions data:read --save-as scraper-bot --yes
564anythink --profile scraper-bot data list posts
565 
566# Revoke a key
567anythink api-keys revoke 42 --yes
568```
569 
570---
571 
572### menus
573 
574Manage dashboard sidebar menus in the active project. Menus control what entities appear in the Anythink dashboard and how they are grouped.
575 
576```
577anythink menus list List all menus with tree structure
578anythink 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```bash
592# List all menus and their items
593anythink menus list
594 
595# Add "Check-ins" under the Profiles group (parent 168) in admin menu (250)
596anythink menus add-item 250 check_ins --icon MessageCircle --parent 168
597 
598# Add a top-level menu item
599anythink menus add-item 250 badges --icon Award
600```
601 
602---
603 
604### integrations
605 
606Manage integrations — both the catalog of available providers (Claude, OpenAI, Slack, Google, etc.) and the active connections that hold credentials for them.
607 
608```
609anythink integrations list List available providers
610anythink integrations get <provider> Show details and operations for one provider
611anythink integrations connections list [--provider <p>] List your active connections
612 
613anythink integrations connect <provider> Create an API-key connection (Claude, OpenAI, etc.)
614anythink integrations oauth status <provider> Show OAuth client setup status
615anythink integrations oauth configure <provider> Set the OAuth client ID + secret
616anythink integrations oauth connect <provider> Connect via the browser OAuth flow
617 
618anythink integrations test <connection-id> Test a connection
619anythink integrations enable <connection-id> Enable a connection
620anythink integrations disable <connection-id> Disable a connection
621anythink integrations disconnect <connection-id> Delete a connection
622 
623anythink 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 
636The 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 
646OAuth credentials need to be set up once per provider before you can connect:
647 
648```bash
649anythink integrations oauth configure slack # prompts for client_id + secret (hidden)
650anythink 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```bash
664# Browse what's available
665anythink integrations list
666anythink integrations get claude
667 
668# API-key flow (Claude, OpenAI)
669anythink integrations connect claude --name "main"
670anythink integrations execute claude generate-text --input "prompt=Tell me a haiku"
671 
672# OAuth flow (Slack, Google, GitHub)
673anythink integrations oauth configure slack
674anythink integrations oauth connect slack --name main
675 
676# Manage connections
677anythink integrations connections list
678anythink integrations test <connection-id>
679anythink integrations disable <connection-id>
680anythink integrations disconnect <connection-id> --yes
681```
682 
683---
684 
685### pay
686 
687Configure and manage Anythink Pay — the built-in Stripe Connect integration for accepting payments in your project.
688 
689```
690anythink pay status Show Stripe Connect account status
691anythink pay connect Set up a Stripe Connect account and start onboarding
692anythink pay payments List recent payments
693anythink 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```bash
708anythink pay status
709anythink pay connect
710anythink pay payments --limit 50
711```
712 
713---
714 
715### oauth
716 
717Configure OAuth social sign-in providers for the active project.
718 
719```
720anythink oauth google status Show Google OAuth configuration status
721anythink oauth google configure Set Google OAuth client ID and secret
722```
723 
724Google 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](https://console.cloud.google.com/apis/credentials).
725 
726Set the authorised redirect URI in your Google Cloud credentials to:
727 
728```
729https://api.my.anythink.cloud/org/<your-org-id>/auth/v1/google/callback
730```
731 
732**Examples**
733 
734```bash
735anythink oauth google status
736anythink oauth google configure
737```
738 
739---
740 
741### api
742 
743List all API endpoints available for the active project — both platform routes and the dynamically generated REST routes for your entities.
744 
745```
746anythink api List all endpoints
747anythink api --json Output as JSON (useful for AI tooling)
748```
749 
750---
751 
752### docs
753 
754Print the full CLI reference.
755 
756```
757anythink docs Print reference as markdown
758anythink docs --json Print reference as JSON (for AI/tooling consumption)
759```
760 
761---
762 
763### migrate
764 
765Copy the entity schema (entities + fields) from one project profile to another. Useful for promoting a schema from staging to production.
766 
767```
768anythink 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```bash
782anythink migrate --from my-app-staging --to my-app-prod
783anythink migrate --from my-app-staging --to my-app-prod --dry-run
784```
785 
786---
787 
788### plans
789 
790List available Anythink plans.
791 
792```
793anythink plans List plans
794anythink plans --json Output as JSON
795```
796 
797---
798 
799## MCP server
800 
801The Anythink MCP server exposes the platform to AI assistants (Claude, Cursor, etc.) via the [Model Context Protocol](https://modelcontextprotocol.io).
802 
803### Install
804 
805No install needed — the recommended way is to run it on demand with `npx`:
806 
807```bash
808npx -y @anythink-cloud/mcp
809```
810 
811Prefer a native binary on your `PATH`? Any of:
812 
813```bash
814# Homebrew (bundled with the CLI — see Installation above)
815brew install anythink-cloud/tap/anythink
816 
817# .NET global tool (requires the .NET 8 SDK)
818dotnet 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/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=anythink&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBhbnl0aGluay1jbG91ZC9tY3AiXX0%3D)
826[![Install in VS Code](https://img.shields.io/badge/Install-VS_Code-007ACC?logo=visualstudiocode&logoColor=white)](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 
828For **Claude Code**, register it in one command:
829 
830```bash
831claude mcp add anythink -- npx -y @anythink-cloud/mcp
832```
833 
834Or add it to your MCP client config manually (e.g. `.mcp.json`):
835 
836```json
837{
838 "mcpServers": {
839 "anythink": {
840 "command": "npx",
841 "args": ["-y", "@anythink-cloud/mcp"]
842 }
843 }
844}
845```
846 
847To pin a profile, add it to `args`: `["-y", "@anythink-cloud/mcp", "--profile", "my-project"]`
848 
849Works 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 
860A 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```yaml
866mcpServers:
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```json
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 
893Once connected, run the `login` tool, then `accounts_use` / `projects_use` to pick your working context.
894 
895### Available tools
896 
897The 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](https://dotnet.microsoft.com/download/dotnet/8)
924- An Anythink account (free tier works)
925 
926### Setup
927 
928```bash
929git clone https://github.com/anythink-cloud/anythink-cli
930cd anythink-cli
931dotnet build
932```
933 
934### Running locally
935 
936```bash
937dotnet run -- --help
938dotnet run -- projects list
939dotnet run -- entities list
940```
941 
942 
943### Releases
944 
945Releases are automated via GitHub Actions. Push a version tag to trigger a build:
946 
947```bash
948git tag v1.2.0
949git push origin v1.2.0
950```
951 
952The 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```
957anythink-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 
979MIT — see [LICENSE](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](https://anythink.cloud).
980 
981---
982 
983Built with [Spectre.Console](https://spectreconsole.net) · Powered by [Anythink](https://anythink.cloud)
984 

Discussion

Alternatives

API and interface designGuides stable API and interface design. Use when designing APIs, module boundaries, or any public interface. Use when creating REST or GraphQL endpoints, defining type contracts between modules, or establishing boundaries between frontend and backend.Coding · MITContext7Pulls up-to-date, version-specific library docs and code examples into the prompt so the AI stops inventing old APIs.Coding · MITContext7 Documentation LookupFetch up-to-date documentation and code examples for any library, framework, SDK, CLI tool, or cloud service. Use whenever the user asks about a specific library — even well-known ones like React, Next.js, Prisma, Express, Tailwind, Django, or Spring Boot — because training data may not reflect recent API changes or version updates. Always use for: API syntax questions, configuration options, version migration issues, "how do I" questions mentioning a library name, debugging that involves library-specific behavior, setup instructions, and CLI tool usage. Use even when you think you know the answer. Do not rely on training data for API details, signatures, or configuration options — they are frequently out of date. Prefer this over web search for library documentation.Coding · MITAdaptyv Bio Foundry APIHow to use the Adaptyv Bio Foundry API and Python SDK for protein experiment design, submission, and results retrieval. Use this skill whenever the user mentions Adaptyv, Foundry API, protein binding assays, protein screening experiments, BLI/SPR assays, thermostability assays, or wants to submit protein sequences for experimental characterization. Also trigger when code imports `adaptyv`, `adaptyv_sdk`, or `FoundryClient`, or references `foundry-api-public.adaptyvbio.com`.Science · MIT