Підготовка контенту платформи Ring
Підготовка контенту платформи Ring
Підготовка контенту платформи Ring
Concepts, value, and typical clone scenarios — less code.
Concepts, value, and typical clone scenarios — less code.
Concepts, value, and typical clone scenarios — less code.
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.
You (chat) → MCP host (Cursor) → ring-mcp (stdio) → Bearer token → /api/mcp/v1/* → Ring services → DBCompared to kingdom tools (legiox-*, ringdom-*), ring-* tools target one Ring white-label instance (entities, opportunities, news, store, users, credits, payments, notifications, messaging).
Ringdom ships per-clone MCP under AI-RING/ — operator tooling for individual Ring clones (not kingdom-wide LegioX assets).
| Package | Path | Role |
|---|---|---|
| ring-mcp | AI-RING/ring-mcp/ | stdio MCP server, 58 ring-* tools |
| Operator manual | This page | Full tool reference + troubleshooting |
| Package README | AI-RING/ring-mcp/README.md | Install, config, smoke test |
| Roadmap | AI-RING/ring-mcp/ROADMAP.md | v1.1 polish, multi-clone profiles |
Kingdom MCP (different scope):
| Server | Scope |
|---|---|
legiox-mcp | AI-CONTEXT, agents, deployment across Ringdom |
ringdom-mcp | Kingdom DB health, file registry |
reggie-mcp | Code 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.
| Capability | What you get |
|---|---|
| Full CRUD | Entities, opportunities, news, store products/orders, users |
| Admin / operator | News Kingdom score/approve/reject, vendor approve/suspend, credit add/spend |
| Read & search | Entity/opportunity search, news categories, payment/credit lookup |
| Messaging | In-app notifications, FCM push, conversations, chat messages |
| Image generation | ring-image-create via ImageConductor (xAI / Google Imagen) → ring-filebase CDN URL |
| Video generation | ring-video-create via VideoConductor (xAI Grok Imagine Video) — draft 480p or production 720p |
| Autonomous newsroom | ring-news-generate via TextConductor + ImageConductor + AudioConductor → cited draft article |
| Per-clone tenancy | One entry per clone via + |
app/api/mcp/v1/)In the clone's .env.local (never commit real tokens):
Restart the Next.js dev server after changing env.
Examples by clone:
| Clone | Typical RING_API_BASE_URL |
|---|---|
ring-platform.org | http://localhost:3000 |
ring-connect-software | http://localhost:3690 (check NEXTAUTH_URL in .env.local) |
| Production | https://your-clone.example.com |
Expected output includes "tools": 55 and "ok": true.
Edit .cursor/mcp.json at the kingdom root (or Cursor Settings → MCP):
Reload MCP in Cursor (restart Cursor or toggle the server).
Ask the agent to run ring-health and ring-whoami, or run the smoke script:
Once connected, use natural language; the agent picks the right ring-* tool.
All tools are prefixed ring-. Sensitive mutations require confirm: true in tool arguments.
| Tool | Description |
|---|---|
ring-health | Gateway liveness |
ring-whoami | Clone name, base URL, service actor role |
| Tool | Description |
|---|---|
ring-entity-list | Paginated list (limit, startAfter, search) |
ring-entity-get | Get by id |
ring-entity-search | Full-text search (q, limit, location) |
ring-entity-create | Create (data object) |
ring-entity-update | Update (id, data) |
ring-entity-delete | Delete (id, confirm) |
| Tool | Description |
|---|---|
ring-opportunity-list | List with filters |
ring-opportunity-get | Get by id |
ring-opportunity-search | Search (q) |
ring-opportunity-create | Create (data) |
ring-opportunity-update | Update (id, data) |
ring-opportunity-delete | Delete (id, confirm) |
ring-opportunity-match | AI match users to opportunity |
| Tool | Description |
|---|---|
ring-news-list | List (category, status, search, authorId) |
ring-news-get | Get by id |
ring-news-categories | Distinct categories |
ring-news-create | Create draft (data) |
ring-news-update | Update (id, data) |
ring-news-publish | Publish (id) |
ring-news-delete | Delete (id, confirm) |
ring-news-score | AI score (News Kingdom) |
ring-news-approve | Approve main-page publication |
ring-news-reject | Reject (, , ) |
| Tool | Description |
|---|---|
ring-store-product-list / ring-store-product-get | Products |
ring-store-product-create / update / delete | Product CRUD (delete needs confirm) |
ring-vendor-list / ring-vendor-get | Vendors |
ring-vendor-approve | Approve onboarding |
ring-vendor-suspend | Suspend (id, confirm, reason, durationDays) |
ring-order-list / ring-order-get | Orders |
ring-order-update-status | Update order status |
| Tool | Description |
|---|---|
ring-user-list | List (role, limit) |
ring-user-get | Get by id |
ring-user-create | Create (email, name, role) |
ring-user-update | Update (id, data) |
ring-user-set-role | Set role (id, role, confirm) |
ring-user-delete | Delete (id, confirm) |
| Tool | Description |
|---|---|
ring-credit-balance | Balance for userId |
ring-credit-history | Transaction history |
ring-credit-add / ring-credit-spend | Mutations (confirm) |
ring-payment-list / ring-payment-get | Payment lookup |
ring-payment-status | Update payment status |
| Tool | Description |
|---|---|
ring-notification-list | List for userId |
ring-notify-send | Create in-app notification |
ring-fcm-send | Push via FCM (confirm) |
ring-conversation-list | Conversations for userId |
ring-message-send | Send chat message |
| Tool | Description |
|---|---|
ring-news-generate | Research 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.
| Tool | Description |
|---|---|
ring-image-create | Generate 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.
| Tool | Description |
|---|---|
ring-video-create | Generate 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.
| Variable | Required | Description |
|---|---|---|
RING_MCP_ACCESS_KEY | Yes | Comma-separated bearer tokens |
RING_MCP_SERVICE_USER_ID | No | Synthetic actor id (default ring-mcp-service) |
RING_MCP_SERVICE_USER_EMAIL | No | Synthetic actor email |
RING_MCP_SERVICE_USER_NAME | No | Display name |
RING_CLONE_NAME / RING_PUBLIC_BASE_URL | No | Shown in ring-whoami |
| Variable | Required | Description |
|---|---|---|
RING_MCP_ACCESS_KEY | Yes | One token from RING_MCP_ACCESS_KEY |
RING_API_BASE_URL | Yes | Clone origin, no trailing slash |
RING_CLONE_NAME | No | Label for operators |
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.
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/*:
Authorization: Bearer <token> checked against RING_MCP_ACCESS_KEYAsyncLocalStorage injects a SUPERadmin actor into auth() for that requestfeatures/*/services/* code{ success, data?, error? }Source: AI-RING/ring-mcp/ (stdio server), ring-platform.org/app/api/mcp/v1/ (gateway).
Invalid service token / 401RING_MCP_ACCESS_KEY in env.Bearer prefix in env — the client adds itRING_MCP_ACCESS_KEY is not configuredfetch failedRING_API_BASE_URL must match the clone port (e.g. 3690 for connect-software, not 3000)RING_MCP_ACCESS_KEY is not setRING_MCP_ACCESS_KEY in .cursor/mcp.json and reload MCPRING_STORE_ADAPTER=postgresql and migrated schemaconversations collection; legacy Firebase-only chat may differnode ring-mcp-server.js --test manuallynpm install in AI-RING/ring-mcpargs.env.local gitignored)confirm: true — do not disable this pattern in wrappersAI-RING/ring-mcp/README.mdAI-RING/ring-mcp/ROADMAP.mdlegiox-mcp, ringdom-mcp, reggie-mcp (Ringdom-wide, not per-clone)AI-CONTEXT/ring-platform.org/implementations/2026-06-06-ring-mcp-server.jsonring-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.
You (chat) → MCP host (Cursor) → ring-mcp (stdio) → Bearer token → /api/mcp/v1/* → Ring services → DBCompared to kingdom tools (legiox-*, ringdom-*), ring-* tools target one Ring white-label instance (entities, opportunities, news, store, users, credits, payments, notifications, messaging).
Ringdom ships per-clone MCP under AI-RING/ — operator tooling for individual Ring clones (not kingdom-wide LegioX assets).
| Package | Path | Role |
|---|---|---|
| ring-mcp | AI-RING/ring-mcp/ | stdio MCP server, 58 ring-* tools |
| Operator manual | This page | Full tool reference + troubleshooting |
| Package README | AI-RING/ring-mcp/README.md | Install, config, smoke test |
| Roadmap | AI-RING/ring-mcp/ROADMAP.md | v1.1 polish, multi-clone profiles |
Kingdom MCP (different scope):
| Server | Scope |
|---|---|
legiox-mcp | AI-CONTEXT, agents, deployment across Ringdom |
ringdom-mcp | Kingdom DB health, file registry |
reggie-mcp | Code 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.
| Capability | What you get |
|---|---|
| Full CRUD | Entities, opportunities, news, store products/orders, users |
| Admin / operator | News Kingdom score/approve/reject, vendor approve/suspend, credit add/spend |
| Read & search | Entity/opportunity search, news categories, payment/credit lookup |
| Messaging | In-app notifications, FCM push, conversations, chat messages |
| Image generation | ring-image-create via ImageConductor (xAI / Google Imagen) → ring-filebase CDN URL |
| Video generation | ring-video-create via VideoConductor (xAI Grok Imagine Video) — draft 480p or production 720p |
| Autonomous newsroom | ring-news-generate via TextConductor + ImageConductor + AudioConductor → cited draft article |
| Per-clone tenancy | One entry per clone via + |
app/api/mcp/v1/)In the clone's .env.local (never commit real tokens):
Restart the Next.js dev server after changing env.
Examples by clone:
| Clone | Typical RING_API_BASE_URL |
|---|---|
ring-platform.org | http://localhost:3000 |
ring-connect-software | http://localhost:3690 (check NEXTAUTH_URL in .env.local) |
| Production | https://your-clone.example.com |
Expected output includes "tools": 55 and "ok": true.
Edit .cursor/mcp.json at the kingdom root (or Cursor Settings → MCP):
Reload MCP in Cursor (restart Cursor or toggle the server).
Ask the agent to run ring-health and ring-whoami, or run the smoke script:
Once connected, use natural language; the agent picks the right ring-* tool.
All tools are prefixed ring-. Sensitive mutations require confirm: true in tool arguments.
| Tool | Description |
|---|---|
ring-health | Gateway liveness |
ring-whoami | Clone name, base URL, service actor role |
| Tool | Description |
|---|---|
ring-entity-list | Paginated list (limit, startAfter, search) |
ring-entity-get | Get by id |
ring-entity-search | Full-text search (q, limit, location) |
ring-entity-create | Create (data object) |
ring-entity-update | Update (id, data) |
ring-entity-delete | Delete (id, confirm) |
| Tool | Description |
|---|---|
ring-opportunity-list | List with filters |
ring-opportunity-get | Get by id |
ring-opportunity-search | Search (q) |
ring-opportunity-create | Create (data) |
ring-opportunity-update | Update (id, data) |
ring-opportunity-delete | Delete (id, confirm) |
ring-opportunity-match | AI match users to opportunity |
| Tool | Description |
|---|---|
ring-news-list | List (category, status, search, authorId) |
ring-news-get | Get by id |
ring-news-categories | Distinct categories |
ring-news-create | Create draft (data) |
ring-news-update | Update (id, data) |
ring-news-publish | Publish (id) |
ring-news-delete | Delete (id, confirm) |
ring-news-score | AI score (News Kingdom) |
ring-news-approve | Approve main-page publication |
ring-news-reject | Reject (, , ) |
| Tool | Description |
|---|---|
ring-store-product-list / ring-store-product-get | Products |
ring-store-product-create / update / delete | Product CRUD (delete needs confirm) |
ring-vendor-list / ring-vendor-get | Vendors |
ring-vendor-approve | Approve onboarding |
ring-vendor-suspend | Suspend (id, confirm, reason, durationDays) |
ring-order-list / ring-order-get | Orders |
ring-order-update-status | Update order status |
| Tool | Description |
|---|---|
ring-user-list | List (role, limit) |
ring-user-get | Get by id |
ring-user-create | Create (email, name, role) |
ring-user-update | Update (id, data) |
ring-user-set-role | Set role (id, role, confirm) |
ring-user-delete | Delete (id, confirm) |
| Tool | Description |
|---|---|
ring-credit-balance | Balance for userId |
ring-credit-history | Transaction history |
ring-credit-add / ring-credit-spend | Mutations (confirm) |
ring-payment-list / ring-payment-get | Payment lookup |
ring-payment-status | Update payment status |
| Tool | Description |
|---|---|
ring-notification-list | List for userId |
ring-notify-send | Create in-app notification |
ring-fcm-send | Push via FCM (confirm) |
ring-conversation-list | Conversations for userId |
ring-message-send | Send chat message |
| Tool | Description |
|---|---|
ring-news-generate | Research 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.
| Tool | Description |
|---|---|
ring-image-create | Generate 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.
| Tool | Description |
|---|---|
ring-video-create | Generate 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.
| Variable | Required | Description |
|---|---|---|
RING_MCP_ACCESS_KEY | Yes | Comma-separated bearer tokens |
RING_MCP_SERVICE_USER_ID | No | Synthetic actor id (default ring-mcp-service) |
RING_MCP_SERVICE_USER_EMAIL | No | Synthetic actor email |
RING_MCP_SERVICE_USER_NAME | No | Display name |
RING_CLONE_NAME / RING_PUBLIC_BASE_URL | No | Shown in ring-whoami |
| Variable | Required | Description |
|---|---|---|
RING_MCP_ACCESS_KEY | Yes | One token from RING_MCP_ACCESS_KEY |
RING_API_BASE_URL | Yes | Clone origin, no trailing slash |
RING_CLONE_NAME | No | Label for operators |
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.
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/*:
Authorization: Bearer <token> checked against RING_MCP_ACCESS_KEYAsyncLocalStorage injects a SUPERadmin actor into auth() for that requestfeatures/*/services/* code{ success, data?, error? }Source: AI-RING/ring-mcp/ (stdio server), ring-platform.org/app/api/mcp/v1/ (gateway).
Invalid service token / 401RING_MCP_ACCESS_KEY in env.Bearer prefix in env — the client adds itRING_MCP_ACCESS_KEY is not configuredfetch failedRING_API_BASE_URL must match the clone port (e.g. 3690 for connect-software, not 3000)RING_MCP_ACCESS_KEY is not setRING_MCP_ACCESS_KEY in .cursor/mcp.json and reload MCPRING_STORE_ADAPTER=postgresql and migrated schemaconversations collection; legacy Firebase-only chat may differnode ring-mcp-server.js --test manuallynpm install in AI-RING/ring-mcpargs.env.local gitignored)confirm: true — do not disable this pattern in wrappersAI-RING/ring-mcp/README.mdAI-RING/ring-mcp/ROADMAP.mdlegiox-mcp, ringdom-mcp, reggie-mcp (Ringdom-wide, not per-clone)AI-CONTEXT/ring-platform.org/implementations/2026-06-06-ring-mcp-server.jsonring-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.
You (chat) → MCP host (Cursor) → ring-mcp (stdio) → Bearer token → /api/mcp/v1/* → Ring services → DBCompared to kingdom tools (legiox-*, ringdom-*), ring-* tools target one Ring white-label instance (entities, opportunities, news, store, users, credits, payments, notifications, messaging).
Ringdom ships per-clone MCP under AI-RING/ — operator tooling for individual Ring clones (not kingdom-wide LegioX assets).
| Package | Path | Role |
|---|---|---|
| ring-mcp | AI-RING/ring-mcp/ | stdio MCP server, 58 ring-* tools |
| Operator manual | This page | Full tool reference + troubleshooting |
| Package README | AI-RING/ring-mcp/README.md | Install, config, smoke test |
| Roadmap | AI-RING/ring-mcp/ROADMAP.md | v1.1 polish, multi-clone profiles |
Kingdom MCP (different scope):
| Server | Scope |
|---|---|
legiox-mcp | AI-CONTEXT, agents, deployment across Ringdom |
ringdom-mcp | Kingdom DB health, file registry |
reggie-mcp | Code 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.
| Capability | What you get |
|---|---|
| Full CRUD | Entities, opportunities, news, store products/orders, users |
| Admin / operator | News Kingdom score/approve/reject, vendor approve/suspend, credit add/spend |
| Read & search | Entity/opportunity search, news categories, payment/credit lookup |
| Messaging | In-app notifications, FCM push, conversations, chat messages |
| Image generation | ring-image-create via ImageConductor (xAI / Google Imagen) → ring-filebase CDN URL |
| Video generation | ring-video-create via VideoConductor (xAI Grok Imagine Video) — draft 480p or production 720p |
| Autonomous newsroom | ring-news-generate via TextConductor + ImageConductor + AudioConductor → cited draft article |
| Per-clone tenancy | One entry per clone via + |
app/api/mcp/v1/)In the clone's .env.local (never commit real tokens):
Restart the Next.js dev server after changing env.
Examples by clone:
| Clone | Typical RING_API_BASE_URL |
|---|---|
ring-platform.org | http://localhost:3000 |
ring-connect-software | http://localhost:3690 (check NEXTAUTH_URL in .env.local) |
| Production | https://your-clone.example.com |
Expected output includes "tools": 55 and "ok": true.
Edit .cursor/mcp.json at the kingdom root (or Cursor Settings → MCP):
Reload MCP in Cursor (restart Cursor or toggle the server).
Ask the agent to run ring-health and ring-whoami, or run the smoke script:
Once connected, use natural language; the agent picks the right ring-* tool.
All tools are prefixed ring-. Sensitive mutations require confirm: true in tool arguments.
| Tool | Description |
|---|---|
ring-health | Gateway liveness |
ring-whoami | Clone name, base URL, service actor role |
| Tool | Description |
|---|---|
ring-entity-list | Paginated list (limit, startAfter, search) |
ring-entity-get | Get by id |
ring-entity-search | Full-text search (q, limit, location) |
ring-entity-create | Create (data object) |
ring-entity-update | Update (id, data) |
ring-entity-delete | Delete (id, confirm) |
| Tool | Description |
|---|---|
ring-opportunity-list | List with filters |
ring-opportunity-get | Get by id |
ring-opportunity-search | Search (q) |
ring-opportunity-create | Create (data) |
ring-opportunity-update | Update (id, data) |
ring-opportunity-delete | Delete (id, confirm) |
ring-opportunity-match | AI match users to opportunity |
| Tool | Description |
|---|---|
ring-news-list | List (category, status, search, authorId) |
ring-news-get | Get by id |
ring-news-categories | Distinct categories |
ring-news-create | Create draft (data) |
ring-news-update | Update (id, data) |
ring-news-publish | Publish (id) |
ring-news-delete | Delete (id, confirm) |
ring-news-score | AI score (News Kingdom) |
ring-news-approve | Approve main-page publication |
ring-news-reject | Reject (, , ) |
| Tool | Description |
|---|---|
ring-store-product-list / ring-store-product-get | Products |
ring-store-product-create / update / delete | Product CRUD (delete needs confirm) |
ring-vendor-list / ring-vendor-get | Vendors |
ring-vendor-approve | Approve onboarding |
ring-vendor-suspend | Suspend (id, confirm, reason, durationDays) |
ring-order-list / ring-order-get | Orders |
ring-order-update-status | Update order status |
| Tool | Description |
|---|---|
ring-user-list | List (role, limit) |
ring-user-get | Get by id |
ring-user-create | Create (email, name, role) |
ring-user-update | Update (id, data) |
ring-user-set-role | Set role (id, role, confirm) |
ring-user-delete | Delete (id, confirm) |
| Tool | Description |
|---|---|
ring-credit-balance | Balance for userId |
ring-credit-history | Transaction history |
ring-credit-add / ring-credit-spend | Mutations (confirm) |
ring-payment-list / ring-payment-get | Payment lookup |
ring-payment-status | Update payment status |
| Tool | Description |
|---|---|
ring-notification-list | List for userId |
ring-notify-send | Create in-app notification |
ring-fcm-send | Push via FCM (confirm) |
ring-conversation-list | Conversations for userId |
ring-message-send | Send chat message |
| Tool | Description |
|---|---|
ring-news-generate | Research 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.
| Tool | Description |
|---|---|
ring-image-create | Generate 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.
| Tool | Description |
|---|---|
ring-video-create | Generate 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.
| Variable | Required | Description |
|---|---|---|
RING_MCP_ACCESS_KEY | Yes | Comma-separated bearer tokens |
RING_MCP_SERVICE_USER_ID | No | Synthetic actor id (default ring-mcp-service) |
RING_MCP_SERVICE_USER_EMAIL | No | Synthetic actor email |
RING_MCP_SERVICE_USER_NAME | No | Display name |
RING_CLONE_NAME / RING_PUBLIC_BASE_URL | No | Shown in ring-whoami |
| Variable | Required | Description |
|---|---|---|
RING_MCP_ACCESS_KEY | Yes | One token from RING_MCP_ACCESS_KEY |
RING_API_BASE_URL | Yes | Clone origin, no trailing slash |
RING_CLONE_NAME | No | Label for operators |
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.
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/*:
Authorization: Bearer <token> checked against RING_MCP_ACCESS_KEYAsyncLocalStorage injects a SUPERadmin actor into auth() for that requestfeatures/*/services/* code{ success, data?, error? }Source: AI-RING/ring-mcp/ (stdio server), ring-platform.org/app/api/mcp/v1/ (gateway).
Invalid service token / 401RING_MCP_ACCESS_KEY in env.Bearer prefix in env — the client adds itRING_MCP_ACCESS_KEY is not configuredfetch failedRING_API_BASE_URL must match the clone port (e.g. 3690 for connect-software, not 3000)RING_MCP_ACCESS_KEY is not setRING_MCP_ACCESS_KEY in .cursor/mcp.json and reload MCPRING_STORE_ADAPTER=postgresql and migrated schemaconversations collection; legacy Firebase-only chat may differnode ring-mcp-server.js --test manuallynpm install in AI-RING/ring-mcpargs.env.local gitignored)confirm: true — do not disable this pattern in wrappersAI-RING/ring-mcp/README.mdAI-RING/ring-mcp/ROADMAP.mdlegiox-mcp, ringdom-mcp, reggie-mcp (Ringdom-wide, not per-clone)AI-CONTEXT/ring-platform.org/implementations/2026-06-06-ring-mcp-server.jsonring-mcpRING_API_BASE_URLRING_MCP_ACCESS_KEY| Safety guards | Destructive tools require confirm: true |
idconfirmreason
# 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
cd /path/to/ringdom/AI-RING/ring-mcp
npm install
node ring-mcp-server.js --test
"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"
}
}
RING_API_BASE_URL=http://localhost:3690 \
RING_MCP_ACCESS_KEY=your-token \
npm run smoke --prefix AI-RING/ring-mcp
# 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
"Run ring-health and ring-whoami for this clone"
"Which Ring clone am I connected to?"
"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"
"List open opportunities"
"Search opportunities mentioning React developer"
"Create an opportunity titled 'Need agronomist' and run matching"
"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>"
"List store products"
"Update order <id> status to shipped"
"Approve vendor <entityId>"
"Suspend vendor <id> for 30 days — confirm"
"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"
"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'"
ring-news-generate source url value https://example.com/press-release
ring-image-create prompt "professional tech referral banner, vibrant gradient" aspectRatio 2:1 purpose og
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 productionring-mcpRING_API_BASE_URLRING_MCP_ACCESS_KEY| Safety guards | Destructive tools require confirm: true |
idconfirmreason
# 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
cd /path/to/ringdom/AI-RING/ring-mcp
npm install
node ring-mcp-server.js --test
"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"
}
}
RING_API_BASE_URL=http://localhost:3690 \
RING_MCP_ACCESS_KEY=your-token \
npm run smoke --prefix AI-RING/ring-mcp
# 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
"Run ring-health and ring-whoami for this clone"
"Which Ring clone am I connected to?"
"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"
"List open opportunities"
"Search opportunities mentioning React developer"
"Create an opportunity titled 'Need agronomist' and run matching"
"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>"
"List store products"
"Update order <id> status to shipped"
"Approve vendor <entityId>"
"Suspend vendor <id> for 30 days — confirm"
"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"
"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'"
ring-news-generate source url value https://example.com/press-release
ring-image-create prompt "professional tech referral banner, vibrant gradient" aspectRatio 2:1 purpose og
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 productionring-mcpRING_API_BASE_URLRING_MCP_ACCESS_KEY| Safety guards | Destructive tools require confirm: true |
idconfirmreason
# 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
cd /path/to/ringdom/AI-RING/ring-mcp
npm install
node ring-mcp-server.js --test
"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"
}
}
RING_API_BASE_URL=http://localhost:3690 \
RING_MCP_ACCESS_KEY=your-token \
npm run smoke --prefix AI-RING/ring-mcp
# 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
"Run ring-health and ring-whoami for this clone"
"Which Ring clone am I connected to?"
"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"
"List open opportunities"
"Search opportunities mentioning React developer"
"Create an opportunity titled 'Need agronomist' and run matching"
"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>"
"List store products"
"Update order <id> status to shipped"
"Approve vendor <entityId>"
"Suspend vendor <id> for 30 days — confirm"
"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"
"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'"
ring-news-generate source url value https://example.com/press-release
ring-image-create prompt "professional tech referral banner, vibrant gradient" aspectRatio 2:1 purpose og
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