{"slug": "smcp-test123-v1-0-1-shared-skills-and-mcp-stack", "title": "[smcp] test123 v1.0.1 - Shared Skills and MCP stack", "summary": "A developer released smcp v1.0.1, a shared-skills and MCP stack that packages reusable agent skills, including one for driving the Appwrite CLI. The Appwrite skill documents installation, login, project initialization, multi-file appwrite.config.json setups, resource deployment, non-interactive CI/CD mode, and type-safe SDK generation.", "body_md": "| name | appwrite-cli | \n|---|---|\n| description | Appwrite CLI skill. Use when managing Appwrite projects from the command line. Covers installation, login, project initialization, multi-file project configuration, deploying functions/sites/tables/buckets/teams/webhooks/topics, flag-based list queries, non-interactive CI/CD mode, and generating type-safe SDKs. | \n\n```\n# npm\nnpm install -g appwrite-cli\n\n# macOS (Homebrew native binary)\nbrew tap appwrite/appwrite\nbrew install appwrite/appwrite/appwrite\n\n# macOS / Linux (script)\ncurl -sL https://appwrite.io/cli/install.sh | bash\n\n# Windows (Scoop)\nscoop install https://raw.githubusercontent.com/appwrite/sdk-for-cli/master/scoop/appwrite.config.json\n```\n\nVerify installation:\n\n```\nappwrite -v\n# Login to your account\nappwrite login\n\n# Login to a self-hosted instance\nappwrite login --endpoint \"https://your-instance.com/v1\"\n\n# Switch to a different saved account\nappwrite login --switch\n\n# Initialize a project (creates appwrite.config.json)\nappwrite init project\n\n# Verify by fetching project info\nappwrite projects get --project-id \"<PROJECT_ID>\"\n```\n\n`appwrite whoami` can show `https://cloud.appwrite.io/v1` as the account login endpoint. That is expected for Appwrite Cloud login. Do not rewrite it to a regional endpoint. Only project configuration and project-scoped API calls use the region endpoint, such as `https://<REGION>.cloud.appwrite.io/v1`.\n\n```\n# Switch endpoint/project for scripted use\nappwrite client --endpoint \"https://<REGION>.cloud.appwrite.io/v1\"\nappwrite client --project-id \"<PROJECT_ID>\"\n```\n\nFor the full list of CLI commands, see [CLI Commands](https://appwrite.io/docs/tooling/command-line/commands).\nFor headless / CI/CD usage, see [Non-Interactive Mode](https://appwrite.io/docs/tooling/command-line/non-interactive).\n\nResources can be configured inline in `appwrite.config.json` or split into separate JSON array files using `includes`.\n\n```\n{\n    \"projectId\": \"<PROJECT_ID>\",\n    \"projectName\": \"Production\",\n    \"endpoint\": \"https://<REGION>.cloud.appwrite.io/v1\",\n    \"includes\": {\n        \"functions\": \"appwrite/functions.json\",\n        \"sites\": \"appwrite/sites.json\",\n        \"webhooks\": \"appwrite/webhooks.json\"\n    },\n    \"settings\": {\n        \"services\": {\n            \"account\": true,\n            \"databases\": true,\n            \"functions\": true,\n            \"sites\": true,\n            \"messaging\": true\n        },\n        \"protocols\": {\n            \"rest\": true,\n            \"graphql\": true,\n            \"websocket\": true\n        },\n        \"auth\": {\n            \"methods\": {\n                \"email-password\": true,\n                \"magic-url\": true\n            },\n            \"security\": {\n                \"sessionsLimit\": 10,\n                \"passwordDictionary\": true\n            }\n        }\n    },\n    \"tablesDB\": [],\n    \"tables\": [],\n    \"buckets\": [],\n    \"teams\": [],\n    \"topics\": []\n}\n```\n\nEach `includes` value must be a relative `.json` path inside the project directory and must point to a JSON array. A resource cannot be defined both inline and in `includes`. When functions or sites are included, their `path` values are resolved relative to the include file directory.\n\nExample `appwrite/functions.json`:\n\n```\n[\n    {\n        \"$id\": \"<FUNCTION_ID>\",\n        \"name\": \"userAuth\",\n        \"enabled\": true,\n        \"logging\": true,\n        \"runtime\": \"node-22\",\n        \"buildSpecification\": \"s-1vcpu-512mb\",\n        \"runtimeSpecification\": \"s-1vcpu-512mb\",\n        \"deploymentRetention\": 7,\n        \"events\": [],\n        \"schedule\": \"\",\n        \"timeout\": 15,\n        \"entrypoint\": \"src/main.js\",\n        \"commands\": \"npm install\",\n        \"ignore\": \"node_modules\\n.tmp\",\n        \"path\": \"../functions/userAuth\"\n    }\n]\n# Pull or push everything\nappwrite pull all --all\nappwrite push all --all\n\n# Pull or push individual resource groups\nappwrite pull settings\nappwrite push settings\nappwrite pull webhooks\nappwrite push webhooks\nappwrite pull functions\nappwrite push functions\n# Create a new function\nappwrite init functions\n\n# Pull existing functions from Console\nappwrite pull functions\n\n# Deploy functions\nappwrite push functions\n{\n    \"functions\": [\n        {\n            \"$id\": \"<FUNCTION_ID>\",\n            \"name\": \"userAuth\",\n            \"enabled\": true,\n            \"logging\": true,\n            \"runtime\": \"node-22\",\n            \"buildSpecification\": \"s-1vcpu-512mb\",\n            \"runtimeSpecification\": \"s-1vcpu-512mb\",\n            \"deploymentRetention\": 7,\n            \"scopes\": [],\n            \"events\": [],\n            \"schedule\": \"\",\n            \"timeout\": 15,\n            \"entrypoint\": \"src/main.js\",\n            \"commands\": \"npm install\",\n            \"ignore\": \"node_modules\\n.tmp\",\n            \"path\": \"functions/userAuth\"\n        }\n    ]\n}\n```\n\nKey function config fields:\n\n| Field | Description | \n|---|---|\n| `enabled` | Enables or disables the function. Disabled functions cannot be executed. | \n| `logging` | Stores execution logs for debugging and observability. | \n| `runtime` | Runtime used to execute the function, such as `node-22` . | \n| `buildSpecification` | Compute specification used while building the deployment. | \n| `runtimeSpecification` | Compute specification used while running executions. | \n| `deploymentRetention` | Number of days to retain old deployments before they are automatically deleted. | \n| `scopes` | API scopes granted to the function's generated execution key. | \n| `events` | Event patterns that trigger the function. | \n| `schedule` | Cron expression for scheduled execution. Empty string disables scheduling. | \n| `timeout` | Maximum execution duration in seconds. | \n| `entrypoint` | File inside `path` that starts the function. | \n| `commands` | Build/install command run before deployment. | \n| `ignore` | Extra newline-separated ignore rules used when packaging code. `.gitignore` is read automatically. | \n| `path` | Local function source directory. If configured through `includes` , this is resolved relative to the include file. | \n\n| Command | Description | \n|---|---|\n| `appwrite functions list` | List all functions | \n| `appwrite functions create` | Create a new function | \n| `appwrite functions get --function-id <ID>` | Get a function by ID | \n| `appwrite functions update --function-id <ID>` | Update a function | \n| `appwrite functions delete --function-id <ID>` | Delete a function | \n| `appwrite functions list-runtimes` | List all active runtimes | \n| `appwrite functions list-deployments --function-id <ID>` | List deployments | \n| `appwrite functions create-deployment --function-id <ID>` | Upload a new deployment | \n| `appwrite functions update-deployment --function-id <ID> --deployment-id <ID>` | Set active deployment | \n| `appwrite functions delete-deployment --function-id <ID> --deployment-id <ID>` | Delete a deployment | \n| `appwrite functions download-deployment --function-id <ID> --deployment-id <ID>` | Download deployment | \n| `appwrite functions create-execution --function-id <ID>` | Trigger execution | \n| `appwrite functions list-executions --function-id <ID>` | List execution logs | \n| `appwrite functions get-execution --function-id <ID> --execution-id <ID>` | Get execution log | \n| `appwrite functions list-variables --function-id <ID>` | List variables | \n| `appwrite functions create-variable --function-id <ID> --key <KEY> --value <VALUE>` | Create variable | \n| `appwrite functions update-variable --function-id <ID> --variable-id <ID> --key <KEY> --value <VALUE>` | Update variable | \n| `appwrite functions delete-variable --function-id <ID> --variable-id <ID>` | Delete variable | \n\nPrefer the query flags for common filtering, sorting, and pagination. Use `--queries` only for raw Appwrite JSON query strings or advanced automation.\n\n```\nappwrite functions list \\\n    --where 'name=api' \\\n    --sort-desc '$createdAt' \\\n    --limit 10 \\\n    --offset 0 \\\n    --json\n\nappwrite functions list-deployments \\\n    --function-id <FUNCTION_ID> \\\n    --limit 5 \\\n    --cursor-after <DEPLOYMENT_ID>\nappwrite functions create-execution \\\n    --function-id <FUNCTION_ID> \\\n    --body '{\"key\": \"value\"}'\nappwrite run functions\n# Deploy and activate the deployment\nappwrite push functions --function-id <FUNCTION_ID> --activate\n\n# Deploy without switching live traffic\nappwrite push functions --function-id <FUNCTION_ID> --activate=false\n```\n\nDo not define function variables in `appwrite.config.json`. Put them in a `.env` file inside the configured function `path`. Variables are saved after they are pushed, so use `--with-variables` only when you want to create, replace, or remove the remote variables from the local `.env` file.\n\n```\n# functions/userAuth/.env\nPUBLIC_FLAG=enabled\nSECRET_TOKEN=replace-me\n\n# Sync function variables from .env\nappwrite push functions --function-id <FUNCTION_ID> --with-variables\n\n# Push code without changing saved variables\nappwrite push functions --function-id <FUNCTION_ID>\n\n# Run locally with variables fetched from function settings\nappwrite run functions --with-variables\n# Create a new site\nappwrite init sites\n\n# Pull existing sites from Console\nappwrite pull sites\n\n# Deploy sites\nappwrite push sites\n{\n    \"sites\": [\n        {\n            \"$id\": \"<SITE_ID>\",\n            \"name\": \"Documentation template\",\n            \"logging\": true,\n            \"framework\": \"astro\",\n            \"timeout\": 30,\n            \"installCommand\": \"npm install\",\n            \"buildCommand\": \"npm run build\",\n            \"outputDirectory\": \"./dist\",\n            \"buildSpecification\": \"s-1vcpu-512mb\",\n            \"runtimeSpecification\": \"s-1vcpu-512mb\",\n            \"buildRuntime\": \"node-22\",\n            \"adapter\": \"ssr\",\n            \"fallbackFile\": \"\",\n            \"startCommand\": \"npm run start\",\n            \"deploymentRetention\": 7,\n            \"path\": \"sites/documentation-template\"\n        }\n    ]\n}\n```\n\nKey site config fields:\n\n| Field | Description | \n|---|---|\n| `logging` | Stores site request and build logs. | \n| `framework` | Framework preset used for build and deployment defaults. | \n| `timeout` | Maximum request or function duration in seconds for server-rendered sites. | \n| `installCommand` | Command used to install dependencies. | \n| `buildCommand` | Command used to build the site. | \n| `outputDirectory` | Directory containing static build output. | \n| `buildSpecification` | Compute specification used while building the deployment. | \n| `runtimeSpecification` | Compute specification used while serving runtime workloads. | \n| `buildRuntime` | Runtime used to build the site, such as `node-22` . | \n| `adapter` | Deployment adapter, such as static or SSR behavior. | \n| `fallbackFile` | Fallback file for SPA routing or missing routes. | \n| `startCommand` | Command used to start server-rendered output. | \n| `deploymentRetention` | Number of days to retain old deployments before they are automatically deleted. | \n| `path` | Local site source directory. If configured through `includes` , this is resolved relative to the include file. | \n\n| Command | Description | \n|---|---|\n| `appwrite sites list` | List all sites | \n| `appwrite sites create` | Create a new site | \n| `appwrite sites get --site-id <ID>` | Get a site by ID | \n| `appwrite sites update --site-id <ID>` | Update a site | \n| `appwrite sites delete --site-id <ID>` | Delete a site | \n| `appwrite sites list-frameworks` | List available frameworks | \n| `appwrite sites list-specifications` | List allowed specs | \n| `appwrite sites list-templates` | List available templates | \n| `appwrite sites get-template --template-id <ID>` | Get template details | \n| `appwrite sites list-deployments --site-id <ID>` | List deployments | \n| `appwrite sites create-deployment --site-id <ID>` | Create deployment | \n| `appwrite sites get-deployment --site-id <ID> --deployment-id <ID>` | Get deployment | \n| `appwrite sites delete-deployment --site-id <ID> --deployment-id <ID>` | Delete deployment | \n| `appwrite sites update-site-deployment --site-id <ID> --deployment-id <ID>` | Set active deployment | \n| `appwrite sites update-deployment-status --site-id <ID> --deployment-id <ID>` | Cancel ongoing build | \n| `appwrite sites list-variables --site-id <ID>` | List variables | \n| `appwrite sites create-variable --site-id <ID> --key <KEY> --value <VALUE>` | Create variable | \n| `appwrite sites update-variable --site-id <ID> --variable-id <ID> --key <KEY> --value <VALUE>` | Update variable | \n| `appwrite sites delete-variable --site-id <ID> --variable-id <ID>` | Delete variable | \n| `appwrite sites list-logs --site-id <ID>` | List request logs | \n| `appwrite sites get-log --site-id <ID> --log-id <ID>` | Get a log | \n| `appwrite sites delete-log --site-id <ID> --log-id <ID>` | Delete a log | \n\nDo not define site variables in `appwrite.config.json`. Put them in a `.env` file inside the configured site `path`. Variables are saved after they are pushed, so use `--with-variables` only when you want to create, replace, or remove the remote variables from the local `.env` file.\n\n```\n# sites/documentation-template/.env\nPUBLIC_SITE_NAME=docs\n\nappwrite push sites --site-id <SITE_ID> --with-variables\n\n# Push code without changing saved variables\nappwrite push sites --site-id <SITE_ID>\n# Create a new table\nappwrite init tables\n\n# Pull existing tables from Console\nappwrite pull tables\n\n# Deploy tables\nappwrite push tables\n{\n    \"tablesDB\": [\n        {\n            \"$id\": \"<DATABASE_ID>\",\n            \"name\": \"songs\",\n            \"enabled\": true\n        }\n    ],\n    \"tables\": [\n        {\n            \"$id\": \"<TABLE_ID>\",\n            \"$permissions\": [\"create(\\\"any\\\")\", \"read(\\\"any\\\")\"],\n            \"databaseId\": \"<DATABASE_ID>\",\n            \"name\": \"music\",\n            \"enabled\": true,\n            \"rowSecurity\": false,\n            \"columns\": [\n                {\n                    \"key\": \"title\",\n                    \"type\": \"varchar\",\n                    \"required\": true,\n                    \"size\": 255\n                }\n            ],\n            \"indexes\": []\n        }\n    ]\n}\n```\n\n| Command | Description | \n|---|---|\n| `appwrite tables-db list-tables --database-id <ID>` | List tables | \n| `appwrite tables-db create-table --database-id <ID>` | Create table | \n| `appwrite tables-db get-table --database-id <ID> --table-id <ID>` | Get table | \n| `appwrite tables-db update-table --database-id <ID> --table-id <ID>` | Update table | \n| `appwrite tables-db delete-table --database-id <ID> --table-id <ID>` | Delete table | \n| `appwrite tables-db list-columns --database-id <ID> --table-id <ID>` | List columns | \n| `appwrite tables-db get-column --database-id <ID> --table-id <ID> --key <KEY>` | Get column | \n| `appwrite tables-db delete-column --database-id <ID> --table-id <ID> --key <KEY>` | Delete column | \n| `appwrite tables-db list-column-indexes --database-id <ID> --table-id <ID>` | List indexes | \n| `appwrite tables-db create-column-index --database-id <ID> --table-id <ID>` | Create index | \n| `appwrite tables-db delete-column-index --database-id <ID> --table-id <ID> --key <KEY>` | Delete index | \n\n**Note:** The legacy `string` type is deprecated. Use explicit string column types instead.\n\n| Command | Description | \n|---|---|\n| `create-varchar-column` | Varchar column — inline storage, fully indexable (max 16,383 chars, size ≤ 768 for full index) | \n| `create-text-column` | Text column — off-page storage, prefix index only (max 16,383 chars) | \n| `create-mediumtext-column` | Mediumtext column — off-page storage (max ~4M chars) | \n| `create-longtext-column` | Longtext column — off-page storage (max ~1B chars) | \n| `create-boolean-column` | Boolean column | \n| `create-integer-column` | Integer column (optional min/max) | \n| `create-float-column` | Float column (optional min/max) | \n| `create-email-column` | Email column | \n| `create-url-column` | URL column | \n| `create-ip-column` | IP address column | \n| `create-datetime-column` | Datetime column (ISO 8601) | \n| `create-enum-column` | Enum column (whitelist of accepted values) | \n| `create-relationship-column` | Relationship column | \n\nAll column commands use `appwrite tables-db <command> --database-id <ID> --table-id <ID>`.\n\n```\n# Create a row\nappwrite tables-db create-row \\\n    --database-id \"<DATABASE_ID>\" --table-id \"<TABLE_ID>\" \\\n    --row-id 'unique()' --data '{ \"title\": \"Hello World\" }' \\\n    --permissions 'read(\"any\")' 'write(\"team:abc\")'\n\n# List rows (JSON output)\nappwrite tables-db list-rows \\\n    --database-id \"<DATABASE_ID>\" --table-id \"<TABLE_ID>\" --json\n\n# Get a row\nappwrite tables-db get-row \\\n    --database-id \"<DATABASE_ID>\" --table-id \"<TABLE_ID>\" --row-id \"<ROW_ID>\"\n```\n\nUse `--where`, `--sort-asc`, `--sort-desc`, `--limit`, `--offset`, `--cursor-after`, and `--cursor-before` on list commands. Row and document list/get commands also support repeated `--select` flags.\n\n```\nappwrite tables-db list-rows \\\n    --database-id \"<DATABASE_ID>\" \\\n    --table-id \"<TABLE_ID>\" \\\n    --where 'status=active' \\\n    --where 'score>=10' \\\n    --sort-asc 'name' \\\n    --select '$id' \\\n    --select 'name' \\\n    --limit 25 \\\n    --json\n\nappwrite databases list-documents \\\n    --database-id \"<DATABASE_ID>\" \\\n    --collection-id \"<COLLECTION_ID>\" \\\n    --where 'email!=null' \\\n    --cursor-before \"<DOCUMENT_ID>\"\n```\n\n`--where` parses strings, numbers, booleans, `null`, and JSON arrays. Supported operators are `=`, `!=`, `>`, `>=`, `<`, and `<=`.\n\n```\n# Create a new bucket\nappwrite init buckets\n\n# Pull existing buckets from Console\nappwrite pull buckets\n\n# Deploy buckets\nappwrite push buckets\n```\n\n| Command | Description | \n|---|---|\n| `appwrite storage list-buckets` | List all buckets | \n| `appwrite storage create-bucket` | Create a bucket | \n| `appwrite storage get-bucket --bucket-id <ID>` | Get a bucket | \n| `appwrite storage update-bucket --bucket-id <ID>` | Update a bucket | \n| `appwrite storage delete-bucket --bucket-id <ID>` | Delete a bucket | \n| `appwrite storage list-files --bucket-id <ID>` | List files | \n| `appwrite storage create-file --bucket-id <ID>` | Upload a file | \n| `appwrite storage get-file --bucket-id <ID> --file-id <ID>` | Get file metadata | \n| `appwrite storage delete-file --bucket-id <ID> --file-id <ID>` | Delete a file | \n| `appwrite storage get-file-download --bucket-id <ID> --file-id <ID>` | Download a file | \n| `appwrite storage get-file-preview --bucket-id <ID> --file-id <ID>` | Get image preview | \n| `appwrite storage get-file-view --bucket-id <ID> --file-id <ID>` | View file in browser | \n\n```\n# Create a new team\nappwrite init teams\n\n# Pull existing teams from Console\nappwrite pull teams\n\n# Deploy teams\nappwrite push teams\n```\n\n| Command | Description | \n|---|---|\n| `appwrite teams list` | List all teams | \n| `appwrite teams create` | Create a team | \n| `appwrite teams get --team-id <ID>` | Get a team | \n| `appwrite teams update-name --team-id <ID>` | Update team name | \n| `appwrite teams delete --team-id <ID>` | Delete a team | \n| `appwrite teams list-memberships --team-id <ID>` | List members | \n| `appwrite teams create-membership --team-id <ID>` | Invite a member | \n| `appwrite teams update-membership --team-id <ID> --membership-id <ID>` | Update member roles | \n| `appwrite teams delete-membership --team-id <ID> --membership-id <ID>` | Remove a member | \n| `appwrite teams get-prefs --team-id <ID>` | Get team preferences | \n| `appwrite teams update-prefs --team-id <ID>` | Update team preferences | \n\n```\n# Pull existing webhooks from Console\nappwrite pull webhooks\n\n# Deploy configured webhooks\nappwrite push webhooks\n[\n    {\n        \"$id\": \"<WEBHOOK_ID>\",\n        \"name\": \"Deploy events\",\n        \"url\": \"https://example.com/appwrite/webhook\",\n        \"events\": [\"functions.*.deployments.*.create\"],\n        \"enabled\": true,\n        \"tls\": true\n    }\n]\n```\n\n| Command | Description | \n|---|---|\n| `appwrite webhooks list` | List webhooks | \n| `appwrite webhooks create` | Create a webhook | \n| `appwrite webhooks get --webhook-id <ID>` | Get a webhook | \n| `appwrite webhooks update --webhook-id <ID>` | Update a webhook | \n| `appwrite webhooks delete --webhook-id <ID>` | Delete a webhook | \n\n```\n# Create a new topic\nappwrite init topics\n\n# Pull existing topics from Console\nappwrite pull topics\n\n# Deploy topics\nappwrite push topics\n```\n\n| Command | Description | \n|---|---|\n| `appwrite messaging list-messages` | List all messages | \n| `appwrite messaging create-email` | Create email message | \n| `appwrite messaging create-push` | Create push notification | \n| `appwrite messaging create-sms` | Create SMS message | \n| `appwrite messaging get-message --message-id <ID>` | Get a message | \n| `appwrite messaging delete --message-id <ID>` | Delete a message | \n| `appwrite messaging list-topics` | List all topics | \n| `appwrite messaging create-topic` | Create a topic | \n| `appwrite messaging get-topic --topic-id <ID>` | Get a topic | \n| `appwrite messaging update-topic --topic-id <ID>` | Update a topic | \n| `appwrite messaging delete-topic --topic-id <ID>` | Delete a topic | \n| `appwrite messaging list-subscribers --topic-id <ID>` | List subscribers | \n| `appwrite messaging create-subscriber --topic-id <ID>` | Add subscriber | \n| `appwrite messaging delete-subscriber --topic-id <ID> --subscriber-id <ID>` | Remove subscriber | \n\n```\n# Create a user\nappwrite users create --user-id \"unique()\" \\\n    --email hello@appwrite.io\n\n# List users\nappwrite users list\n\n# Get a user\nappwrite users get --user-id \"<USER_ID>\"\n\n# Delete a user\nappwrite users delete --user-id \"<USER_ID>\"\n```\n\nProject-level commands use the singular `project` service for current-project operations that do not need `--project-id`.\n\n```\n# Project settings and policies\nappwrite project update-service --service-id functions --enabled true\nappwrite project update-protocol --protocol-id rest --enabled true\nappwrite project list-policies\nappwrite project get-policy --policy-id \"<POLICY_ID>\"\n\n# OAuth2 providers\nappwrite project list-o-auth-2-providers\nappwrite project get-o-auth-2-provider --provider github\nappwrite project update-o-auth-2-git-hub --enabled true\n\n# Mock phones and short-lived API keys\nappwrite project create-mock-phone --phone \"+12025550123\" --otp \"123456\"\nappwrite project list-mock-phones\nappwrite project create-ephemeral-key\n# Auto-detect language and generate\nappwrite generate\n\n# Specify output directory\nappwrite generate --output ./src/generated\n\n# Specify language\nappwrite generate --language typescript\n\n# Override generated import settings\nappwrite generate --appwrite-import-source node-appwrite --import-extension .js\n```\n\nGenerated files:\n\n| File | Description | \n|---|---|\n| `types.ts` | Type definitions from your database schema | \n| `databases.ts` | Typed database helpers for querying and mutating rows | \n| `constants.ts` | Configuration constants (endpoint, project ID) | \n| `index.ts` | Entry point that exports all helpers | \n\nUsage:\n\n``` js\nimport { databases } from \"./generated/appwrite\";\n\nconst customers = databases.use(\"main\").use(\"customers\");\n\n// Create\nconst customer = await customers.create({\n    name: \"Walter O' Brian\",\n    email: \"walter@example.com\"\n});\n\n// List with typed queries\nconst results = await customers.list({\n    queries: (q) => [\n        q.equal(\"name\", \"Walter O' Brian\"),\n        q.orderDesc(\"$createdAt\"),\n        q.limit(10)\n    ]\n});\n\n// Update\nawait customers.update(\"customer-id-123\", {\n    email: \"walter@scorpion.com\"\n});\n\n// Delete\nawait customers.delete(\"customer-id-123\");\n\n// Bulk create\nawait customers.createMany([\n    { name: \"Walter O' Brian\", email: \"walter@example.com\" },\n    { name: \"Paige Dineen\", email: \"paige@example.com\" }\n]);\n```\n\nFor headless automation, see the [Non-Interactive Mode docs](https://appwrite.io/docs/tooling/command-line/non-interactive).\n\n```\n# Push everything\nappwrite push all --all --force\n\n# Push specific resources\nappwrite push functions --all --force\nappwrite push functions --function-id <FUNCTION_ID> --force\nappwrite push sites --all --force\nappwrite push tables --all --force\nappwrite push teams --all --force\nappwrite push buckets --all --force\nappwrite push webhooks --all --force\nappwrite push topics --all --force\n```\n\n| Option | Description | \n|---|---|\n| `-v, --version` | Output version number | \n| `-V, --verbose` | Show complete error log | \n| `-j, --json` | Output in JSON format | \n| `-f, --force` | Confirm all warnings | \n| `-a, --all` | Select all resources | \n| `--id [id...]` | Pass a list of IDs | \n| `--report` | Generate GitHub error report link | \n| `--console` | Get direct link to Console | \n| `--open` | Open Console link in browser | \n| `-h, --help` | Display help | \n\n```\n# Update CLI using the detected install method\nappwrite update\n\n# Show manual update instructions\nappwrite update --manual\n\n# Install shell completions\nappwrite completion install\n# List users with JSON output\nappwrite users list --json\n\n# Get verbose error output\nappwrite users list --verbose\n\n# View a row in the Console\nappwrite tables-db get-row \\\n    --database-id \"<DATABASE_ID>\" \\\n    --table-id \"<TABLE_ID>\" \\\n    --row-id \"<ROW_ID>\" \\\n    --console --open\n\n# Generate error report\nappwrite login --report\n```\n\n", "url": "https://wpnews.pro/news/smcp-test123-v1-0-1-shared-skills-and-mcp-stack", "canonical_source": "https://gist.github.com/TanPhat23/921fd6e63efb04f6043a246654479630", "published_at": "2026-09-29 02:25:15+00:00", "updated_at": "2026-09-30 15:20:25.168920+00:00", "lang": "en", "topics": ["ai-agents", "agent-protocols", "developer-tools", "ai-tools"], "entities": ["smcp", "Appwrite", "Appwrite CLI", "Model Context Protocol"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/smcp-test123-v1-0-1-shared-skills-and-mcp-stack", "markdown": "https://wpnews.pro/news/smcp-test123-v1-0-1-shared-skills-and-mcp-stack.md", "text": "https://wpnews.pro/news/smcp-test123-v1-0-1-shared-skills-and-mcp-stack.txt", "jsonld": "https://wpnews.pro/news/smcp-test123-v1-0-1-shared-skills-and-mcp-stack.jsonld"}}