Documentation

    Documentation

    Documentation

    Ring Platform Logo

    Завантаження документації...

    Підготовка контенту платформи Ring

    Ring Platform Logo

    Завантаження документації...

    Підготовка контенту платформи Ring

    Ring Platform Logo

    Завантаження документації...

    Підготовка контенту платформи Ring

    1. /
    2. /Ring MCP Server

    9 min listen

    1. /
    2. /Ring MCP Server

    9 min listen

    1. /
    2. /Ring MCP Server

    9 min listen

    Concepts, value, and typical clone scenarios — less code.

    Welcome to Ring
    Quick Reference
    Getting Started
    Prerequisites
    Installation
    First Success Validation
    Next Steps
    Architecture
    Data Model
    Real Time
    Discovery Mutation Sync
    Security
    Backend Services
    k8s-postgres-fcm Mode
    Firebase Integration
    Features
    Authentication
    Email AI-CRM
    Entities
    Opportunities
    Notifications
    Push Notifications with FCM (Ring-Powered)
    Tunnel Protocol
    Wallet & Credit System
    Multi-Vendor Store
    Referral Codes (Refcodes)
    Affiliate & Referral Enablement
    Payments Overview
    PaymentConductor
    SubscriptionConductor
    VideoConductor
    News Module - Digital Newspaper Experience
    Member Blogs
    Public Profile Pages
    Username Reservation System
    Scientific Editor
    Locale System
    Security & Compliance
    NFT Marketplace
    Token Staking System
    Performance Optimization Patterns
    Mobile Experience
    Wallet
    Wallet Security Tips
    API
    Authentication
    Email AI-CRM API
    Entities
    Opportunities
    Messaging API
    Notifications API
    Wallet API
    Store API
    Admin API
    Customization
    Quick Start — Your First Ring Clone
    Customization Guide
    Token Economics Setup
    Payment Gateway Integration
    Reference Ring deployments
    Branding
    Themes
    Web3
    Token launch jurisdictions
    Deployment
    Self-hosted deployment
    Vercel
    Docker
    Monitoring & Analytics
    Performance Optimization
    Backup & Recovery
    Development
    Local Setup
    Code Structure
    Documentation components
    Community tooling
    Ring MCP Server
    Generative Images (ImageConductor)
    Autonomous Newsroom (Grok)
    OSS vs enterprise
    Whitelabel Navigation
    Best Practices
    Workflow
    Code Style
    Performance
    Testing
    Deployment
    Debugging
    Contributing
    MCP
    ring-image-create
    ring-video-create
    Examples
    Quick Start
    White Label
    Real World
    Integrations
    Ethereum wallets (Wagmi v3)

    Quick entry (CTOs · auditors · agents)

    Welcome — mission & audiences
    Quick Reference
    Getting started
    Architecture & Auth.js
    Backend modes & databases (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Deploy (Docker · k8s)
    Security & compliance reads
    ringdom.org — LegioX homebase
    Source — MIT license (GitHub)

    Concepts, value, and typical clone scenarios — less code.

    Welcome to Ring
    Quick Reference
    Getting Started
    Prerequisites
    Installation
    First Success Validation
    Next Steps
    Architecture
    Data Model
    Real Time
    Discovery Mutation Sync
    Security
    Backend Services
    k8s-postgres-fcm Mode
    Firebase Integration
    Features
    Authentication
    Email AI-CRM
    Entities
    Opportunities
    Notifications
    Push Notifications with FCM (Ring-Powered)
    Tunnel Protocol
    Wallet & Credit System
    Multi-Vendor Store
    Referral Codes (Refcodes)
    Affiliate & Referral Enablement
    Payments Overview
    PaymentConductor
    SubscriptionConductor
    VideoConductor
    News Module - Digital Newspaper Experience
    Member Blogs
    Public Profile Pages
    Username Reservation System
    Scientific Editor
    Locale System
    Security & Compliance
    NFT Marketplace
    Token Staking System
    Performance Optimization Patterns
    Mobile Experience
    Wallet
    Wallet Security Tips
    API
    Authentication
    Email AI-CRM API
    Entities
    Opportunities
    Messaging API
    Notifications API
    Wallet API
    Store API
    Admin API
    Customization
    Quick Start — Your First Ring Clone
    Customization Guide
    Token Economics Setup
    Payment Gateway Integration
    Reference Ring deployments
    Branding
    Themes
    Web3
    Token launch jurisdictions
    Deployment
    Self-hosted deployment
    Vercel
    Docker
    Monitoring & Analytics
    Performance Optimization
    Backup & Recovery
    Development
    Local Setup
    Code Structure
    Documentation components
    Community tooling
    Ring MCP Server
    Generative Images (ImageConductor)
    Autonomous Newsroom (Grok)
    OSS vs enterprise
    Whitelabel Navigation
    Best Practices
    Workflow
    Code Style
    Performance
    Testing
    Deployment
    Debugging
    Contributing
    MCP
    ring-image-create
    ring-video-create
    Examples
    Quick Start
    White Label
    Real World
    Integrations
    Ethereum wallets (Wagmi v3)

    Quick entry (CTOs · auditors · agents)

    Welcome — mission & audiences
    Quick Reference
    Getting started
    Architecture & Auth.js
    Backend modes & databases (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Deploy (Docker · k8s)
    Security & compliance reads
    ringdom.org — LegioX homebase
    Source — MIT license (GitHub)

    Concepts, value, and typical clone scenarios — less code.

    Welcome to Ring
    Quick Reference
    Getting Started
    Prerequisites
    Installation
    First Success Validation
    Next Steps
    Architecture
    Data Model
    Real Time
    Discovery Mutation Sync
    Security
    Backend Services
    k8s-postgres-fcm Mode
    Firebase Integration
    Features
    Authentication
    Email AI-CRM
    Entities
    Opportunities
    Notifications
    Push Notifications with FCM (Ring-Powered)
    Tunnel Protocol
    Wallet & Credit System
    Multi-Vendor Store
    Referral Codes (Refcodes)
    Affiliate & Referral Enablement
    Payments Overview
    PaymentConductor
    SubscriptionConductor
    VideoConductor
    News Module - Digital Newspaper Experience
    Member Blogs
    Public Profile Pages
    Username Reservation System
    Scientific Editor
    Locale System
    Security & Compliance
    NFT Marketplace
    Token Staking System
    Performance Optimization Patterns
    Mobile Experience
    Wallet
    Wallet Security Tips
    API
    Authentication
    Email AI-CRM API
    Entities
    Opportunities
    Messaging API
    Notifications API
    Wallet API
    Store API
    Admin API
    Customization
    Quick Start — Your First Ring Clone
    Customization Guide
    Token Economics Setup
    Payment Gateway Integration
    Reference Ring deployments
    Branding
    Themes
    Web3
    Token launch jurisdictions
    Deployment
    Self-hosted deployment
    Vercel
    Docker
    Monitoring & Analytics
    Performance Optimization
    Backup & Recovery
    Development
    Local Setup
    Code Structure
    Documentation components
    Community tooling
    Ring MCP Server
    Generative Images (ImageConductor)
    Autonomous Newsroom (Grok)
    OSS vs enterprise
    Whitelabel Navigation
    Best Practices
    Workflow
    Code Style
    Performance
    Testing
    Deployment
    Debugging
    Contributing
    MCP
    ring-image-create
    ring-video-create
    Examples
    Quick Start
    White Label
    Real World
    Integrations
    Ethereum wallets (Wagmi v3)

    Quick entry (CTOs · auditors · agents)

    Welcome — mission & audiences
    Quick Reference
    Getting started
    Architecture & Auth.js
    Backend modes & databases (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Deploy (Docker · k8s)
    Security & compliance reads
    ringdom.org — LegioX homebase
    Source — MIT license (GitHub)
    Docs
    Development
    Docs
    Development
    Docs
    Development

    Ring MCP Server (ring-mcp)

    Operate any Ring clone from natural language in Cursor, Claude Desktop, or any MCP host.

    Model Context Protocol (MCP) is an open standard for connecting AI apps to external systems — data sources, tools, and workflows. Think of it as a USB-C port for AI: build a server once, plug it into Cursor, Claude, VS Code Copilot, and others.

    ring-mcp is Ringdom's MCP server for Ring Platform clones. It does not talk to PostgreSQL directly. It calls a service-token HTTP gateway on the clone at /api/mcp/v1/*, which runs as synthetic SUPERADMIN and reuses Ring's existing service layer.

    text
    
    You (chat) → MCP host (Cursor) → ring-mcp (stdio) → Bearer token → /api/mcp/v1/* → Ring services → DB

    Compared to kingdom tools (legiox-*, ringdom-*), ring-* tools target one Ring white-label instance (entities, opportunities, news, store, users, credits, payments, notifications, messaging).

    AI-RING package (v1.0.0)

    Ringdom ships per-clone MCP under AI-RING/ — operator tooling for individual Ring clones (not kingdom-wide LegioX assets).

    PackagePathRole
    ring-mcpAI-RING/ring-mcp/stdio MCP server, 58 ring-* tools
    Operator manualThis pageFull tool reference + troubleshooting
    Package READMEAI-RING/ring-mcp/README.mdInstall, config, smoke test
    RoadmapAI-RING/ring-mcp/ROADMAP.mdv1.1 polish, multi-clone profiles

    Kingdom MCP (different scope):

    ServerScope
    legiox-mcpAI-CONTEXT, agents, deployment across Ringdom
    ringdom-mcpKingdom DB health, file registry
    reggie-mcpCode propagation between ring clones

    Gateway code lives in the Ring app (app/api/mcp/v1/, lib/auth/service-token.ts, lib/auth/mcp-actor-context.ts). The stdio server lives in AI-RING/ring-mcp/ring-mcp-server.js.


    Features

    CapabilityWhat you get
    Full CRUDEntities, opportunities, news, store products/orders, users
    Admin / operatorNews Kingdom score/approve/reject, vendor approve/suspend, credit add/spend
    Read & searchEntity/opportunity search, news categories, payment/credit lookup
    MessagingIn-app notifications, FCM push, conversations, chat messages
    Image generationring-image-create via ImageConductor (xAI / Google Imagen) → ring-filebase CDN URL
    Video generationring-video-create via VideoConductor (xAI Grok Imagine Video) — draft 480p or production 720p
    Autonomous newsroomring-news-generate via TextConductor + ImageConductor + AudioConductor → cited draft article
    Per-clone tenancyOne entry per clone via +

    Prerequisites

    • Node.js 20+ (Ring Platform baseline)
    • A running Ring clone with the MCP gateway deployed (app/api/mcp/v1/)
    • MCP client: Cursor, Claude Desktop, VS Code, or MCPJam
    • A service token configured on both sides (Ring env + MCP env)

    Quick start

    1 — Ring clone: enable the gateway

    In the clone's .env.local (never commit real tokens):

    Restart the Next.js dev server after changing env.

    Examples by clone:

    CloneTypical RING_API_BASE_URL
    ring-platform.orghttp://localhost:3000
    ring-connect-softwarehttp://localhost:3690 (check NEXTAUTH_URL in .env.local)
    Productionhttps://your-clone.example.com

    2 — Install ring-mcp

    Expected output includes "tools": 55 and "ok": true.

    3 — Register in Cursor

    Edit .cursor/mcp.json at the kingdom root (or Cursor Settings → MCP):

    Reload MCP in Cursor (restart Cursor or toggle the server).

    4 — Verify

    Ask the agent to run ring-health and ring-whoami, or run the smoke script:


    Usage examples

    Once connected, use natural language; the agent picks the right ring-* tool.

    Meta & health

    Entities

    Opportunities

    News (Member Blog / News Kingdom)

    Store

    Users & credits

    Notifications & messaging


    Tool reference (58 tools)

    All tools are prefixed ring-. Sensitive mutations require confirm: true in tool arguments.

    Meta

    ToolDescription
    ring-healthGateway liveness
    ring-whoamiClone name, base URL, service actor role

    Entities

    ToolDescription
    ring-entity-listPaginated list (limit, startAfter, search)
    ring-entity-getGet by id
    ring-entity-searchFull-text search (q, limit, location)
    ring-entity-createCreate (data object)
    ring-entity-updateUpdate (id, data)
    ring-entity-deleteDelete (id, confirm)

    Opportunities

    ToolDescription
    ring-opportunity-listList with filters
    ring-opportunity-getGet by id
    ring-opportunity-searchSearch (q)
    ring-opportunity-createCreate (data)
    ring-opportunity-updateUpdate (id, data)
    ring-opportunity-deleteDelete (id, confirm)
    ring-opportunity-matchAI match users to opportunity

    News

    ToolDescription
    ring-news-listList (category, status, search, authorId)
    ring-news-getGet by id
    ring-news-categoriesDistinct categories
    ring-news-createCreate draft (data)
    ring-news-updateUpdate (id, data)
    ring-news-publishPublish (id)
    ring-news-deleteDelete (id, confirm)
    ring-news-scoreAI score (News Kingdom)
    ring-news-approveApprove main-page publication
    ring-news-rejectReject (, , )

    Store

    ToolDescription
    ring-store-product-list / ring-store-product-getProducts
    ring-store-product-create / update / deleteProduct CRUD (delete needs confirm)
    ring-vendor-list / ring-vendor-getVendors
    ring-vendor-approveApprove onboarding
    ring-vendor-suspendSuspend (id, confirm, reason, durationDays)
    ring-order-list / ring-order-getOrders
    ring-order-update-statusUpdate order status

    Users

    ToolDescription
    ring-user-listList (role, limit)
    ring-user-getGet by id
    ring-user-createCreate (email, name, role)
    ring-user-updateUpdate (id, data)
    ring-user-set-roleSet role (id, role, confirm)
    ring-user-deleteDelete (id, confirm)

    Credit & payments

    ToolDescription
    ring-credit-balanceBalance for userId
    ring-credit-historyTransaction history
    ring-credit-add / ring-credit-spendMutations (confirm)
    ring-payment-list / ring-payment-getPayment lookup
    ring-payment-statusUpdate payment status

    Notifications & messaging

    ToolDescription
    ring-notification-listList for userId
    ring-notify-sendCreate in-app notification
    ring-fcm-sendPush via FCM (confirm)
    ring-conversation-listConversations for userId
    ring-message-sendSend chat message

    Autonomous newsroom

    ToolDescription
    ring-news-generateResearch URL/topic with Grok web_search + x_search, write cited HTML draft, pick category/tags, generate featured image + optional TTS

    Quick example:

    Full reference: Autonomous newsroom (generative-newsroom) — parameters, Telegram flow, translation fan-out, env block, troubleshooting.

    Image generation

    ToolDescription
    ring-image-createGenerate image via ImageConductor (xai or google), store in ring-filebase, return CDN URL

    Quick example:

    Full reference: Generative images (generative-images) — providers, OG presets, env block, GenerateImageDialog, migration 006_generated_images_schema.sql.

    Video generation

    ToolDescription
    ring-video-createGenerate video via VideoConductor (xAI Grok Imagine). draft = 480p (~$0.05/s). production = 720p. Set remaster: true to lock a draft prompt at 720p.

    Quick examples:

    Full reference: Generative videos (generative-videos) — draft vs production, CLI manifest, remaster flow, env block.


    Configuration

    Ring clone (server)

    VariableRequiredDescription
    RING_MCP_ACCESS_KEYYesComma-separated bearer tokens
    RING_MCP_SERVICE_USER_IDNoSynthetic actor id (default ring-mcp-service)
    RING_MCP_SERVICE_USER_EMAILNoSynthetic actor email
    RING_MCP_SERVICE_USER_NAMENoDisplay name
    RING_CLONE_NAME / RING_PUBLIC_BASE_URLNoShown in ring-whoami

    ring-mcp (MCP client env)

    VariableRequiredDescription
    RING_MCP_ACCESS_KEYYesOne token from RING_MCP_ACCESS_KEY
    RING_API_BASE_URLYesClone origin, no trailing slash
    RING_CLONE_NAMENoLabel for operators

    Multiple clones

    Add separate MCP entries, e.g. ring-mcp-platform and ring-mcp-connect, each with its own RING_API_BASE_URL, token, and RING_CLONE_NAME.


    Architecture notes

    Ring's 130+ user-facing API routes use Auth.js session cookies, not bearer tokens. Retrofitting every route was avoided by introducing /api/mcp/v1/*:

    1. Authorization: Bearer <token> checked against RING_MCP_ACCESS_KEY
    2. AsyncLocalStorage injects a SUPERadmin actor into auth() for that request
    3. Handlers call existing features/*/services/* code
    4. Uniform JSON: { success, data?, error? }

    Source: AI-RING/ring-mcp/ (stdio server), ring-platform.org/app/api/mcp/v1/ (gateway).


    Troubleshooting

    Invalid service token / 401

    • Check RING_MCP_ACCESS_KEY in env.
    • Restart Ring after env changes
    • No Bearer prefix in env — the client adds it

    RING_MCP_ACCESS_KEY is not configured

    • Set the variable on the Ring app env (.env.local and k8s secrets), not only in MCP config

    Connection refused / fetch failed

    • Ring dev server must be running
    • RING_API_BASE_URL must match the clone port (e.g. 3690 for connect-software, not 3000)

    RING_MCP_ACCESS_KEY is not set

    • Fill RING_MCP_ACCESS_KEY in .cursor/mcp.json and reload MCP

    Tool works but returns empty data

    • Clone database may be empty — seed dev data or create records via UI first
    • Store requires RING_STORE_ADAPTER=postgresql and migrated schema

    FCM / messaging failures

    • FCM needs Firebase Admin configured on the clone
    • Conversation list uses PostgreSQL conversations collection; legacy Firebase-only chat may differ

    MCP server not listed in Cursor

    • Run node ring-mcp-server.js --test manually
    • Check npm install in AI-RING/ring-mcp
    • Confirm absolute path in args

    Security

    • SUPERadmin power: service token equals full operator access — treat like a root API key
    • Never commit tokens; use per-environment secrets (k8s secrets, .env.local gitignored)
    • Rotate immediately if leaked
    • Prefer one token per clone per environment (dev/staging/prod)
    • Destructive MCP tools require explicit confirm: true — do not disable this pattern in wrappers

    Development


    Related links

    • Model Context Protocol — intro
    • Cursor MCP docs
    • Twenty CRM MCP Server — similar CRUD + MCP client pattern (reference implementation)
    • Package README: AI-RING/ring-mcp/README.md
    • Package roadmap: AI-RING/ring-mcp/ROADMAP.md
    • Kingdom MCP: legiox-mcp, ringdom-mcp, reggie-mcp (Ringdom-wide, not per-clone)
    • Implementation log: AI-CONTEXT/ring-platform.org/implementations/2026-06-06-ring-mcp-server.json

    Ring MCP Server (ring-mcp)

    Operate any Ring clone from natural language in Cursor, Claude Desktop, or any MCP host.

    Model Context Protocol (MCP) is an open standard for connecting AI apps to external systems — data sources, tools, and workflows. Think of it as a USB-C port for AI: build a server once, plug it into Cursor, Claude, VS Code Copilot, and others.

    ring-mcp is Ringdom's MCP server for Ring Platform clones. It does not talk to PostgreSQL directly. It calls a service-token HTTP gateway on the clone at /api/mcp/v1/*, which runs as synthetic SUPERADMIN and reuses Ring's existing service layer.

    text
    
    You (chat) → MCP host (Cursor) → ring-mcp (stdio) → Bearer token → /api/mcp/v1/* → Ring services → DB

    Compared to kingdom tools (legiox-*, ringdom-*), ring-* tools target one Ring white-label instance (entities, opportunities, news, store, users, credits, payments, notifications, messaging).

    AI-RING package (v1.0.0)

    Ringdom ships per-clone MCP under AI-RING/ — operator tooling for individual Ring clones (not kingdom-wide LegioX assets).

    PackagePathRole
    ring-mcpAI-RING/ring-mcp/stdio MCP server, 58 ring-* tools
    Operator manualThis pageFull tool reference + troubleshooting
    Package READMEAI-RING/ring-mcp/README.mdInstall, config, smoke test
    RoadmapAI-RING/ring-mcp/ROADMAP.mdv1.1 polish, multi-clone profiles

    Kingdom MCP (different scope):

    ServerScope
    legiox-mcpAI-CONTEXT, agents, deployment across Ringdom
    ringdom-mcpKingdom DB health, file registry
    reggie-mcpCode propagation between ring clones

    Gateway code lives in the Ring app (app/api/mcp/v1/, lib/auth/service-token.ts, lib/auth/mcp-actor-context.ts). The stdio server lives in AI-RING/ring-mcp/ring-mcp-server.js.


    Features

    CapabilityWhat you get
    Full CRUDEntities, opportunities, news, store products/orders, users
    Admin / operatorNews Kingdom score/approve/reject, vendor approve/suspend, credit add/spend
    Read & searchEntity/opportunity search, news categories, payment/credit lookup
    MessagingIn-app notifications, FCM push, conversations, chat messages
    Image generationring-image-create via ImageConductor (xAI / Google Imagen) → ring-filebase CDN URL
    Video generationring-video-create via VideoConductor (xAI Grok Imagine Video) — draft 480p or production 720p
    Autonomous newsroomring-news-generate via TextConductor + ImageConductor + AudioConductor → cited draft article
    Per-clone tenancyOne entry per clone via +

    Prerequisites

    • Node.js 20+ (Ring Platform baseline)
    • A running Ring clone with the MCP gateway deployed (app/api/mcp/v1/)
    • MCP client: Cursor, Claude Desktop, VS Code, or MCPJam
    • A service token configured on both sides (Ring env + MCP env)

    Quick start

    1 — Ring clone: enable the gateway

    In the clone's .env.local (never commit real tokens):

    Restart the Next.js dev server after changing env.

    Examples by clone:

    CloneTypical RING_API_BASE_URL
    ring-platform.orghttp://localhost:3000
    ring-connect-softwarehttp://localhost:3690 (check NEXTAUTH_URL in .env.local)
    Productionhttps://your-clone.example.com

    2 — Install ring-mcp

    Expected output includes "tools": 55 and "ok": true.

    3 — Register in Cursor

    Edit .cursor/mcp.json at the kingdom root (or Cursor Settings → MCP):

    Reload MCP in Cursor (restart Cursor or toggle the server).

    4 — Verify

    Ask the agent to run ring-health and ring-whoami, or run the smoke script:


    Usage examples

    Once connected, use natural language; the agent picks the right ring-* tool.

    Meta & health

    Entities

    Opportunities

    News (Member Blog / News Kingdom)

    Store

    Users & credits

    Notifications & messaging


    Tool reference (58 tools)

    All tools are prefixed ring-. Sensitive mutations require confirm: true in tool arguments.

    Meta

    ToolDescription
    ring-healthGateway liveness
    ring-whoamiClone name, base URL, service actor role

    Entities

    ToolDescription
    ring-entity-listPaginated list (limit, startAfter, search)
    ring-entity-getGet by id
    ring-entity-searchFull-text search (q, limit, location)
    ring-entity-createCreate (data object)
    ring-entity-updateUpdate (id, data)
    ring-entity-deleteDelete (id, confirm)

    Opportunities

    ToolDescription
    ring-opportunity-listList with filters
    ring-opportunity-getGet by id
    ring-opportunity-searchSearch (q)
    ring-opportunity-createCreate (data)
    ring-opportunity-updateUpdate (id, data)
    ring-opportunity-deleteDelete (id, confirm)
    ring-opportunity-matchAI match users to opportunity

    News

    ToolDescription
    ring-news-listList (category, status, search, authorId)
    ring-news-getGet by id
    ring-news-categoriesDistinct categories
    ring-news-createCreate draft (data)
    ring-news-updateUpdate (id, data)
    ring-news-publishPublish (id)
    ring-news-deleteDelete (id, confirm)
    ring-news-scoreAI score (News Kingdom)
    ring-news-approveApprove main-page publication
    ring-news-rejectReject (, , )

    Store

    ToolDescription
    ring-store-product-list / ring-store-product-getProducts
    ring-store-product-create / update / deleteProduct CRUD (delete needs confirm)
    ring-vendor-list / ring-vendor-getVendors
    ring-vendor-approveApprove onboarding
    ring-vendor-suspendSuspend (id, confirm, reason, durationDays)
    ring-order-list / ring-order-getOrders
    ring-order-update-statusUpdate order status

    Users

    ToolDescription
    ring-user-listList (role, limit)
    ring-user-getGet by id
    ring-user-createCreate (email, name, role)
    ring-user-updateUpdate (id, data)
    ring-user-set-roleSet role (id, role, confirm)
    ring-user-deleteDelete (id, confirm)

    Credit & payments

    ToolDescription
    ring-credit-balanceBalance for userId
    ring-credit-historyTransaction history
    ring-credit-add / ring-credit-spendMutations (confirm)
    ring-payment-list / ring-payment-getPayment lookup
    ring-payment-statusUpdate payment status

    Notifications & messaging

    ToolDescription
    ring-notification-listList for userId
    ring-notify-sendCreate in-app notification
    ring-fcm-sendPush via FCM (confirm)
    ring-conversation-listConversations for userId
    ring-message-sendSend chat message

    Autonomous newsroom

    ToolDescription
    ring-news-generateResearch URL/topic with Grok web_search + x_search, write cited HTML draft, pick category/tags, generate featured image + optional TTS

    Quick example:

    Full reference: Autonomous newsroom (generative-newsroom) — parameters, Telegram flow, translation fan-out, env block, troubleshooting.

    Image generation

    ToolDescription
    ring-image-createGenerate image via ImageConductor (xai or google), store in ring-filebase, return CDN URL

    Quick example:

    Full reference: Generative images (generative-images) — providers, OG presets, env block, GenerateImageDialog, migration 006_generated_images_schema.sql.

    Video generation

    ToolDescription
    ring-video-createGenerate video via VideoConductor (xAI Grok Imagine). draft = 480p (~$0.05/s). production = 720p. Set remaster: true to lock a draft prompt at 720p.

    Quick examples:

    Full reference: Generative videos (generative-videos) — draft vs production, CLI manifest, remaster flow, env block.


    Configuration

    Ring clone (server)

    VariableRequiredDescription
    RING_MCP_ACCESS_KEYYesComma-separated bearer tokens
    RING_MCP_SERVICE_USER_IDNoSynthetic actor id (default ring-mcp-service)
    RING_MCP_SERVICE_USER_EMAILNoSynthetic actor email
    RING_MCP_SERVICE_USER_NAMENoDisplay name
    RING_CLONE_NAME / RING_PUBLIC_BASE_URLNoShown in ring-whoami

    ring-mcp (MCP client env)

    VariableRequiredDescription
    RING_MCP_ACCESS_KEYYesOne token from RING_MCP_ACCESS_KEY
    RING_API_BASE_URLYesClone origin, no trailing slash
    RING_CLONE_NAMENoLabel for operators

    Multiple clones

    Add separate MCP entries, e.g. ring-mcp-platform and ring-mcp-connect, each with its own RING_API_BASE_URL, token, and RING_CLONE_NAME.


    Architecture notes

    Ring's 130+ user-facing API routes use Auth.js session cookies, not bearer tokens. Retrofitting every route was avoided by introducing /api/mcp/v1/*:

    1. Authorization: Bearer <token> checked against RING_MCP_ACCESS_KEY
    2. AsyncLocalStorage injects a SUPERadmin actor into auth() for that request
    3. Handlers call existing features/*/services/* code
    4. Uniform JSON: { success, data?, error? }

    Source: AI-RING/ring-mcp/ (stdio server), ring-platform.org/app/api/mcp/v1/ (gateway).


    Troubleshooting

    Invalid service token / 401

    • Check RING_MCP_ACCESS_KEY in env.
    • Restart Ring after env changes
    • No Bearer prefix in env — the client adds it

    RING_MCP_ACCESS_KEY is not configured

    • Set the variable on the Ring app env (.env.local and k8s secrets), not only in MCP config

    Connection refused / fetch failed

    • Ring dev server must be running
    • RING_API_BASE_URL must match the clone port (e.g. 3690 for connect-software, not 3000)

    RING_MCP_ACCESS_KEY is not set

    • Fill RING_MCP_ACCESS_KEY in .cursor/mcp.json and reload MCP

    Tool works but returns empty data

    • Clone database may be empty — seed dev data or create records via UI first
    • Store requires RING_STORE_ADAPTER=postgresql and migrated schema

    FCM / messaging failures

    • FCM needs Firebase Admin configured on the clone
    • Conversation list uses PostgreSQL conversations collection; legacy Firebase-only chat may differ

    MCP server not listed in Cursor

    • Run node ring-mcp-server.js --test manually
    • Check npm install in AI-RING/ring-mcp
    • Confirm absolute path in args

    Security

    • SUPERadmin power: service token equals full operator access — treat like a root API key
    • Never commit tokens; use per-environment secrets (k8s secrets, .env.local gitignored)
    • Rotate immediately if leaked
    • Prefer one token per clone per environment (dev/staging/prod)
    • Destructive MCP tools require explicit confirm: true — do not disable this pattern in wrappers

    Development


    Related links

    • Model Context Protocol — intro
    • Cursor MCP docs
    • Twenty CRM MCP Server — similar CRUD + MCP client pattern (reference implementation)
    • Package README: AI-RING/ring-mcp/README.md
    • Package roadmap: AI-RING/ring-mcp/ROADMAP.md
    • Kingdom MCP: legiox-mcp, ringdom-mcp, reggie-mcp (Ringdom-wide, not per-clone)
    • Implementation log: AI-CONTEXT/ring-platform.org/implementations/2026-06-06-ring-mcp-server.json

    Ring MCP Server (ring-mcp)

    Operate any Ring clone from natural language in Cursor, Claude Desktop, or any MCP host.

    Model Context Protocol (MCP) is an open standard for connecting AI apps to external systems — data sources, tools, and workflows. Think of it as a USB-C port for AI: build a server once, plug it into Cursor, Claude, VS Code Copilot, and others.

    ring-mcp is Ringdom's MCP server for Ring Platform clones. It does not talk to PostgreSQL directly. It calls a service-token HTTP gateway on the clone at /api/mcp/v1/*, which runs as synthetic SUPERADMIN and reuses Ring's existing service layer.

    text
    
    You (chat) → MCP host (Cursor) → ring-mcp (stdio) → Bearer token → /api/mcp/v1/* → Ring services → DB

    Compared to kingdom tools (legiox-*, ringdom-*), ring-* tools target one Ring white-label instance (entities, opportunities, news, store, users, credits, payments, notifications, messaging).

    AI-RING package (v1.0.0)

    Ringdom ships per-clone MCP under AI-RING/ — operator tooling for individual Ring clones (not kingdom-wide LegioX assets).

    PackagePathRole
    ring-mcpAI-RING/ring-mcp/stdio MCP server, 58 ring-* tools
    Operator manualThis pageFull tool reference + troubleshooting
    Package READMEAI-RING/ring-mcp/README.mdInstall, config, smoke test
    RoadmapAI-RING/ring-mcp/ROADMAP.mdv1.1 polish, multi-clone profiles

    Kingdom MCP (different scope):

    ServerScope
    legiox-mcpAI-CONTEXT, agents, deployment across Ringdom
    ringdom-mcpKingdom DB health, file registry
    reggie-mcpCode propagation between ring clones

    Gateway code lives in the Ring app (app/api/mcp/v1/, lib/auth/service-token.ts, lib/auth/mcp-actor-context.ts). The stdio server lives in AI-RING/ring-mcp/ring-mcp-server.js.


    Features

    CapabilityWhat you get
    Full CRUDEntities, opportunities, news, store products/orders, users
    Admin / operatorNews Kingdom score/approve/reject, vendor approve/suspend, credit add/spend
    Read & searchEntity/opportunity search, news categories, payment/credit lookup
    MessagingIn-app notifications, FCM push, conversations, chat messages
    Image generationring-image-create via ImageConductor (xAI / Google Imagen) → ring-filebase CDN URL
    Video generationring-video-create via VideoConductor (xAI Grok Imagine Video) — draft 480p or production 720p
    Autonomous newsroomring-news-generate via TextConductor + ImageConductor + AudioConductor → cited draft article
    Per-clone tenancyOne entry per clone via +

    Prerequisites

    • Node.js 20+ (Ring Platform baseline)
    • A running Ring clone with the MCP gateway deployed (app/api/mcp/v1/)
    • MCP client: Cursor, Claude Desktop, VS Code, or MCPJam
    • A service token configured on both sides (Ring env + MCP env)

    Quick start

    1 — Ring clone: enable the gateway

    In the clone's .env.local (never commit real tokens):

    Restart the Next.js dev server after changing env.

    Examples by clone:

    CloneTypical RING_API_BASE_URL
    ring-platform.orghttp://localhost:3000
    ring-connect-softwarehttp://localhost:3690 (check NEXTAUTH_URL in .env.local)
    Productionhttps://your-clone.example.com

    2 — Install ring-mcp

    Expected output includes "tools": 55 and "ok": true.

    3 — Register in Cursor

    Edit .cursor/mcp.json at the kingdom root (or Cursor Settings → MCP):

    Reload MCP in Cursor (restart Cursor or toggle the server).

    4 — Verify

    Ask the agent to run ring-health and ring-whoami, or run the smoke script:


    Usage examples

    Once connected, use natural language; the agent picks the right ring-* tool.

    Meta & health

    Entities

    Opportunities

    News (Member Blog / News Kingdom)

    Store

    Users & credits

    Notifications & messaging


    Tool reference (58 tools)

    All tools are prefixed ring-. Sensitive mutations require confirm: true in tool arguments.

    Meta

    ToolDescription
    ring-healthGateway liveness
    ring-whoamiClone name, base URL, service actor role

    Entities

    ToolDescription
    ring-entity-listPaginated list (limit, startAfter, search)
    ring-entity-getGet by id
    ring-entity-searchFull-text search (q, limit, location)
    ring-entity-createCreate (data object)
    ring-entity-updateUpdate (id, data)
    ring-entity-deleteDelete (id, confirm)

    Opportunities

    ToolDescription
    ring-opportunity-listList with filters
    ring-opportunity-getGet by id
    ring-opportunity-searchSearch (q)
    ring-opportunity-createCreate (data)
    ring-opportunity-updateUpdate (id, data)
    ring-opportunity-deleteDelete (id, confirm)
    ring-opportunity-matchAI match users to opportunity

    News

    ToolDescription
    ring-news-listList (category, status, search, authorId)
    ring-news-getGet by id
    ring-news-categoriesDistinct categories
    ring-news-createCreate draft (data)
    ring-news-updateUpdate (id, data)
    ring-news-publishPublish (id)
    ring-news-deleteDelete (id, confirm)
    ring-news-scoreAI score (News Kingdom)
    ring-news-approveApprove main-page publication
    ring-news-rejectReject (, , )

    Store

    ToolDescription
    ring-store-product-list / ring-store-product-getProducts
    ring-store-product-create / update / deleteProduct CRUD (delete needs confirm)
    ring-vendor-list / ring-vendor-getVendors
    ring-vendor-approveApprove onboarding
    ring-vendor-suspendSuspend (id, confirm, reason, durationDays)
    ring-order-list / ring-order-getOrders
    ring-order-update-statusUpdate order status

    Users

    ToolDescription
    ring-user-listList (role, limit)
    ring-user-getGet by id
    ring-user-createCreate (email, name, role)
    ring-user-updateUpdate (id, data)
    ring-user-set-roleSet role (id, role, confirm)
    ring-user-deleteDelete (id, confirm)

    Credit & payments

    ToolDescription
    ring-credit-balanceBalance for userId
    ring-credit-historyTransaction history
    ring-credit-add / ring-credit-spendMutations (confirm)
    ring-payment-list / ring-payment-getPayment lookup
    ring-payment-statusUpdate payment status

    Notifications & messaging

    ToolDescription
    ring-notification-listList for userId
    ring-notify-sendCreate in-app notification
    ring-fcm-sendPush via FCM (confirm)
    ring-conversation-listConversations for userId
    ring-message-sendSend chat message

    Autonomous newsroom

    ToolDescription
    ring-news-generateResearch URL/topic with Grok web_search + x_search, write cited HTML draft, pick category/tags, generate featured image + optional TTS

    Quick example:

    Full reference: Autonomous newsroom (generative-newsroom) — parameters, Telegram flow, translation fan-out, env block, troubleshooting.

    Image generation

    ToolDescription
    ring-image-createGenerate image via ImageConductor (xai or google), store in ring-filebase, return CDN URL

    Quick example:

    Full reference: Generative images (generative-images) — providers, OG presets, env block, GenerateImageDialog, migration 006_generated_images_schema.sql.

    Video generation

    ToolDescription
    ring-video-createGenerate video via VideoConductor (xAI Grok Imagine). draft = 480p (~$0.05/s). production = 720p. Set remaster: true to lock a draft prompt at 720p.

    Quick examples:

    Full reference: Generative videos (generative-videos) — draft vs production, CLI manifest, remaster flow, env block.


    Configuration

    Ring clone (server)

    VariableRequiredDescription
    RING_MCP_ACCESS_KEYYesComma-separated bearer tokens
    RING_MCP_SERVICE_USER_IDNoSynthetic actor id (default ring-mcp-service)
    RING_MCP_SERVICE_USER_EMAILNoSynthetic actor email
    RING_MCP_SERVICE_USER_NAMENoDisplay name
    RING_CLONE_NAME / RING_PUBLIC_BASE_URLNoShown in ring-whoami

    ring-mcp (MCP client env)

    VariableRequiredDescription
    RING_MCP_ACCESS_KEYYesOne token from RING_MCP_ACCESS_KEY
    RING_API_BASE_URLYesClone origin, no trailing slash
    RING_CLONE_NAMENoLabel for operators

    Multiple clones

    Add separate MCP entries, e.g. ring-mcp-platform and ring-mcp-connect, each with its own RING_API_BASE_URL, token, and RING_CLONE_NAME.


    Architecture notes

    Ring's 130+ user-facing API routes use Auth.js session cookies, not bearer tokens. Retrofitting every route was avoided by introducing /api/mcp/v1/*:

    1. Authorization: Bearer <token> checked against RING_MCP_ACCESS_KEY
    2. AsyncLocalStorage injects a SUPERadmin actor into auth() for that request
    3. Handlers call existing features/*/services/* code
    4. Uniform JSON: { success, data?, error? }

    Source: AI-RING/ring-mcp/ (stdio server), ring-platform.org/app/api/mcp/v1/ (gateway).


    Troubleshooting

    Invalid service token / 401

    • Check RING_MCP_ACCESS_KEY in env.
    • Restart Ring after env changes
    • No Bearer prefix in env — the client adds it

    RING_MCP_ACCESS_KEY is not configured

    • Set the variable on the Ring app env (.env.local and k8s secrets), not only in MCP config

    Connection refused / fetch failed

    • Ring dev server must be running
    • RING_API_BASE_URL must match the clone port (e.g. 3690 for connect-software, not 3000)

    RING_MCP_ACCESS_KEY is not set

    • Fill RING_MCP_ACCESS_KEY in .cursor/mcp.json and reload MCP

    Tool works but returns empty data

    • Clone database may be empty — seed dev data or create records via UI first
    • Store requires RING_STORE_ADAPTER=postgresql and migrated schema

    FCM / messaging failures

    • FCM needs Firebase Admin configured on the clone
    • Conversation list uses PostgreSQL conversations collection; legacy Firebase-only chat may differ

    MCP server not listed in Cursor

    • Run node ring-mcp-server.js --test manually
    • Check npm install in AI-RING/ring-mcp
    • Confirm absolute path in args

    Security

    • SUPERadmin power: service token equals full operator access — treat like a root API key
    • Never commit tokens; use per-environment secrets (k8s secrets, .env.local gitignored)
    • Rotate immediately if leaked
    • Prefer one token per clone per environment (dev/staging/prod)
    • Destructive MCP tools require explicit confirm: true — do not disable this pattern in wrappers

    Development


    Related links

    • Model Context Protocol — intro
    • Cursor MCP docs
    • Twenty CRM MCP Server — similar CRUD + MCP client pattern (reference implementation)
    • Package README: AI-RING/ring-mcp/README.md
    • Package roadmap: AI-RING/ring-mcp/ROADMAP.md
    • Kingdom MCP: legiox-mcp, ringdom-mcp, reggie-mcp (Ringdom-wide, not per-clone)
    • Implementation log: AI-CONTEXT/ring-platform.org/implementations/2026-06-06-ring-mcp-server.json
    ring-mcp
    RING_API_BASE_URL
    RING_MCP_ACCESS_KEY
    Safety guardsDestructive tools require confirm: true
    id
    confirm
    reason
    bash
    
    # Comma-separated; ring-mcp uses it for auth
    RING_MCP_ACCESS_KEY=replace-with-long-random-string
    
    # Optional synthetic service identity (defaults are fine for dev)
    # RING_MCP_SERVICE_USER_ID=ring-mcp-service
    # RING_MCP_SERVICE_USER_EMAIL=ring-mcp@system.local
    # RING_MCP_SERVICE_USER_NAME=Ring MCP Service
    # RING_CLONE_NAME=connect-software
    bash
    
    cd /path/to/ringdom/AI-RING/ring-mcp
    npm install
    node ring-mcp-server.js --test
    json
    
    "ring-mcp": {
      "command": "node",
      "args": ["/Users/insight/code/ringdom/AI-RING/ring-mcp/ring-mcp-server.js"],
      "env": {
        "RING_API_BASE_URL": "http://localhost:3690",
        "RING_MCP_ACCESS_KEY": "replace-with-long-random-string",
        "RING_CLONE_NAME": "ring-connect-software"
      }
    }
    bash
    
    RING_API_BASE_URL=http://localhost:3690 \
    RING_MCP_ACCESS_KEY=your-token \
    npm run smoke --prefix AI-RING/ring-mcp
    bash
    
    # List tools
    node AI-RING/ring-mcp/ring-mcp-server.js --test
    
    # HTTP smoke (Ring must be up)
    RING_API_BASE_URL=http://localhost:3000 RING_MCP_ACCESS_KEY=dev-token \
      npm run smoke --prefix AI-RING/ring-mcp
    
    # curl gateway directly
    curl -s -H "Authorization: Bearer dev-token" \
      http://localhost:3000/api/mcp/v1/meta/health | jq
    text
    
    "Run ring-health and ring-whoami for this clone"
    "Which Ring clone am I connected to?"
    text
    
    "List the first 20 entities"
    "Search entities for 'agritech' in Cherkasy"
    "Create an entity for Acme Farms with type vendor"
    "Delete entity <id> — I confirm this is destructive"
    text
    
    "List open opportunities"
    "Search opportunities mentioning React developer"
    "Create an opportunity titled 'Need agronomist' and run matching"
    text
    
    "List draft news articles"
    "Create a draft post titled 'Platform update' with excerpt and body"
    "Publish news article <id>"
    "Score article <id> for main-page promotion"
    "Approve main-page publication for <id>"
    text
    
    "List store products"
    "Update order <id> status to shipped"
    "Approve vendor <entityId>"
    "Suspend vendor <id> for 30 days — confirm"
    text
    
    "List users with role member"
    "Set user <id> role to admin — confirm"
    "Show credit balance for user <id>"
    "Add 100 credits to user <id> — confirm"
    text
    
    "List unread notifications for user <id>"
    "Send in-app notification to user <id>: title 'Hello', body 'Test'"
    "List conversations for user <id>"
    "Send message in conversation <id>: 'Following up on your order'"
    text
    
    ring-news-generate source url value https://example.com/press-release
    text
    
    ring-image-create prompt "professional tech referral banner, vibrant gradient" aspectRatio 2:1 purpose og
    text
    
    ring-video-create prompt "HOA neighbors frustrated on video call, documentary" qualityMode draft duration 6 purpose viral-ad
    
    ring-video-create prompt "…same prompt…" remaster true remasterFromRequestId <draft-request-id> qualityMode production
    ring-mcp
    RING_API_BASE_URL
    RING_MCP_ACCESS_KEY
    Safety guardsDestructive tools require confirm: true
    id
    confirm
    reason
    bash
    
    # Comma-separated; ring-mcp uses it for auth
    RING_MCP_ACCESS_KEY=replace-with-long-random-string
    
    # Optional synthetic service identity (defaults are fine for dev)
    # RING_MCP_SERVICE_USER_ID=ring-mcp-service
    # RING_MCP_SERVICE_USER_EMAIL=ring-mcp@system.local
    # RING_MCP_SERVICE_USER_NAME=Ring MCP Service
    # RING_CLONE_NAME=connect-software
    bash
    
    cd /path/to/ringdom/AI-RING/ring-mcp
    npm install
    node ring-mcp-server.js --test
    json
    
    "ring-mcp": {
      "command": "node",
      "args": ["/Users/insight/code/ringdom/AI-RING/ring-mcp/ring-mcp-server.js"],
      "env": {
        "RING_API_BASE_URL": "http://localhost:3690",
        "RING_MCP_ACCESS_KEY": "replace-with-long-random-string",
        "RING_CLONE_NAME": "ring-connect-software"
      }
    }
    bash
    
    RING_API_BASE_URL=http://localhost:3690 \
    RING_MCP_ACCESS_KEY=your-token \
    npm run smoke --prefix AI-RING/ring-mcp
    bash
    
    # List tools
    node AI-RING/ring-mcp/ring-mcp-server.js --test
    
    # HTTP smoke (Ring must be up)
    RING_API_BASE_URL=http://localhost:3000 RING_MCP_ACCESS_KEY=dev-token \
      npm run smoke --prefix AI-RING/ring-mcp
    
    # curl gateway directly
    curl -s -H "Authorization: Bearer dev-token" \
      http://localhost:3000/api/mcp/v1/meta/health | jq
    text
    
    "Run ring-health and ring-whoami for this clone"
    "Which Ring clone am I connected to?"
    text
    
    "List the first 20 entities"
    "Search entities for 'agritech' in Cherkasy"
    "Create an entity for Acme Farms with type vendor"
    "Delete entity <id> — I confirm this is destructive"
    text
    
    "List open opportunities"
    "Search opportunities mentioning React developer"
    "Create an opportunity titled 'Need agronomist' and run matching"
    text
    
    "List draft news articles"
    "Create a draft post titled 'Platform update' with excerpt and body"
    "Publish news article <id>"
    "Score article <id> for main-page promotion"
    "Approve main-page publication for <id>"
    text
    
    "List store products"
    "Update order <id> status to shipped"
    "Approve vendor <entityId>"
    "Suspend vendor <id> for 30 days — confirm"
    text
    
    "List users with role member"
    "Set user <id> role to admin — confirm"
    "Show credit balance for user <id>"
    "Add 100 credits to user <id> — confirm"
    text
    
    "List unread notifications for user <id>"
    "Send in-app notification to user <id>: title 'Hello', body 'Test'"
    "List conversations for user <id>"
    "Send message in conversation <id>: 'Following up on your order'"
    text
    
    ring-news-generate source url value https://example.com/press-release
    text
    
    ring-image-create prompt "professional tech referral banner, vibrant gradient" aspectRatio 2:1 purpose og
    text
    
    ring-video-create prompt "HOA neighbors frustrated on video call, documentary" qualityMode draft duration 6 purpose viral-ad
    
    ring-video-create prompt "…same prompt…" remaster true remasterFromRequestId <draft-request-id> qualityMode production
    ring-mcp
    RING_API_BASE_URL
    RING_MCP_ACCESS_KEY
    Safety guardsDestructive tools require confirm: true
    id
    confirm
    reason
    bash
    
    # Comma-separated; ring-mcp uses it for auth
    RING_MCP_ACCESS_KEY=replace-with-long-random-string
    
    # Optional synthetic service identity (defaults are fine for dev)
    # RING_MCP_SERVICE_USER_ID=ring-mcp-service
    # RING_MCP_SERVICE_USER_EMAIL=ring-mcp@system.local
    # RING_MCP_SERVICE_USER_NAME=Ring MCP Service
    # RING_CLONE_NAME=connect-software
    bash
    
    cd /path/to/ringdom/AI-RING/ring-mcp
    npm install
    node ring-mcp-server.js --test
    json
    
    "ring-mcp": {
      "command": "node",
      "args": ["/Users/insight/code/ringdom/AI-RING/ring-mcp/ring-mcp-server.js"],
      "env": {
        "RING_API_BASE_URL": "http://localhost:3690",
        "RING_MCP_ACCESS_KEY": "replace-with-long-random-string",
        "RING_CLONE_NAME": "ring-connect-software"
      }
    }
    bash
    
    RING_API_BASE_URL=http://localhost:3690 \
    RING_MCP_ACCESS_KEY=your-token \
    npm run smoke --prefix AI-RING/ring-mcp
    bash
    
    # List tools
    node AI-RING/ring-mcp/ring-mcp-server.js --test
    
    # HTTP smoke (Ring must be up)
    RING_API_BASE_URL=http://localhost:3000 RING_MCP_ACCESS_KEY=dev-token \
      npm run smoke --prefix AI-RING/ring-mcp
    
    # curl gateway directly
    curl -s -H "Authorization: Bearer dev-token" \
      http://localhost:3000/api/mcp/v1/meta/health | jq
    text
    
    "Run ring-health and ring-whoami for this clone"
    "Which Ring clone am I connected to?"
    text
    
    "List the first 20 entities"
    "Search entities for 'agritech' in Cherkasy"
    "Create an entity for Acme Farms with type vendor"
    "Delete entity <id> — I confirm this is destructive"
    text
    
    "List open opportunities"
    "Search opportunities mentioning React developer"
    "Create an opportunity titled 'Need agronomist' and run matching"
    text
    
    "List draft news articles"
    "Create a draft post titled 'Platform update' with excerpt and body"
    "Publish news article <id>"
    "Score article <id> for main-page promotion"
    "Approve main-page publication for <id>"
    text
    
    "List store products"
    "Update order <id> status to shipped"
    "Approve vendor <entityId>"
    "Suspend vendor <id> for 30 days — confirm"
    text
    
    "List users with role member"
    "Set user <id> role to admin — confirm"
    "Show credit balance for user <id>"
    "Add 100 credits to user <id> — confirm"
    text
    
    "List unread notifications for user <id>"
    "Send in-app notification to user <id>: title 'Hello', body 'Test'"
    "List conversations for user <id>"
    "Send message in conversation <id>: 'Following up on your order'"
    text
    
    ring-news-generate source url value https://example.com/press-release
    text
    
    ring-image-create prompt "professional tech referral banner, vibrant gradient" aspectRatio 2:1 purpose og
    text
    
    ring-video-create prompt "HOA neighbors frustrated on video call, documentary" qualityMode draft duration 6 purpose viral-ad
    
    ring-video-create prompt "…same prompt…" remaster true remasterFromRequestId <draft-request-id> qualityMode production