Skip to content

Agentic rails

Build an app next to MOS

MOS exposes a versioned REST API (/api/v1/**) and an MCP server (/api/v1/mcp) so agents and external apps can build against a team's data with nothing but a team API token. MOS stays the system of record; your app is a UX shell. A token can only ever see its own team's rows — RLS + the token's team are the tenant boundary.

14
live surfaces
10
MCP tools
16
tracked gaps

Coverage matrix

Every surface × REST v1 read/write × MCP tool × token scope × gap. Every Live cell was verified by calling the endpoint with a real team key, not by reading code.

SurfaceREST v1MCP toolScopeGap
Data tables — list/create
R W GET /api/v1/tables/tables
list_tables*:read / *:writeRoute is tables/tables; index advertises data/tables (G-2). No table DELETE.
Data tables — rows
R W GET .../{id}/rows
query_rows, insert_row*No row UPDATE / DELETE (G-3).
Data tables — columns
R W GET .../{id}/columns
*:readNo column create/update/delete via API (G-3).
Data tables — formulas
No endpoint (G-4). Formulas only editable in the admin UI.
Data tables — views
No endpoint (G-4).
Data tables — row audit
No endpoint (G-4). row_audit is internal-only.
Knowledge bases
R W GET /api/v1/bases
list_bases*Read/append only. No block update/delete, no base delete.
Forms — schema
R W GET /api/v1/forms
list_formsforms:readNo submit-a-form endpoint and no list-submissions endpoint via token (G-5).
Review packets
R W GET /api/v1/review/packets
*No MCP tool. No read of answers / verdicts (advise-and-consent) via API (G-6).
Artifacts
R W GET /api/v1/artifacts, GET /{id}
*Full CRUD (the most complete surface). No MCP tool.
Workflows
R W GET /api/v1/workflows 500 live
list_workflows (same 500)*:readLive 500 — schema drift in the query (G-7). No run/trigger via token.
Context (RAG)
R W POST /api/v1/context
*:readRetrieval only. No MCP tool.
Wellness
R W GET /api/v1/wellness, .../consent, .../observations
*Fully wired (best-covered vertical). No MCP tool.
Commerce (Stripe)
create_invoice, create_quote, create_checkout, create_subscription*:writeMCP-only — no v1 REST equivalents (G-8).
Browser extension
R W GET .../extension/{rules,tools,vault}
*Purpose-built for the Ask-Page extension; tools is module-gated (403 when off).
MCP (unified actions)
R W GET /api/v1/mcp/actions
(is itself MCP)*Tenant-gated by modules.mcp_export (403 when off — off by default). Exposes every defineAction.
Contacts / CRM
Absent from v1. Rich API exists at /api/contacts/ but is session-only** (G-9). Scope resource contacts exists but no route consumes it.
Files / media
Absent from v1. /api/files/, /api/media/ are session-only (G-10). No token upload/download/list.
Scheduling
Absent from v1 (G-11). No event-types / availability / bookings for tokens.
EMR read surfaces
Absent from v1. /api/emr/** + FHIR are session/portal-scoped, not token routes (G-12). Scope resource emr exists but no v1 route.
Comms — send
Read-only. GET /api/v1/comms/threads (phi) exists; no send-message endpoint via token (G-13). (Threads 404'd on cmf — module-gated.)
Articles / blog
Absent from v1. /api/admin/articles* is session-only (G-14).
Config
R W ️ partial
Only extension/rules exposes some brand/config. No general team-config read (G-15).
Events / webhooks
No subscription mechanism for external builders (G-16). Webhooks exist but are admin-configured (/api/admin/webhooks), not a token-driven "subscribe to changes".

R = REST v1 read · W = REST v1 write · badge color: green = verified live, amber = present but caveated, ghost = absent. Full legend in the quickstart and the source doc docs/api/agentic-rails.md.

The gaps, ranked

What an external builder cannot do yet, ranked by how much it blocks the "adjacent app" promise. P0 blocks a real build today. Each gap is a tracked task under the launch-readiness epic.

P0 G-16 No events/webhooks for tokens

"Subscribe to changes" (the quickstart's third call) has no implementation. An adjacent app must poll.

P0 G-9 Contacts absent from v1

The CRM is the most-wanted surface; a builder cannot read/write contacts with a token.

P0 G-10 Files/media absent from v1

No token upload/download — adjacent apps can't attach or fetch media.

P1 G-1 Scopes are wildcard-only

Almost every route requires resource:"*", so you cannot mint a least-privilege token (e.g. "forms:read only"). Defeats the scope model.

P1 G-7 `/api/v1/workflows` 500

Live 500 (schema drift). The one workflow read surface is broken; list_workflows MCP tool inherits it.

P1 G-3 Table rows/columns are read+append only

No row UPDATE/DELETE, no column CRUD — a table-backed app can't edit or delete.

P1 G-11 Scheduling absent from v1

No booking/availability for tokens — blocks scheduling-driven adjacent apps.

P1 G-2 Index advertises the wrong tables path

/api/v1 says data/tables (403); the real route is tables/tables (200). Self-docs point builders at a dead path.

P2 G-13 Comms send absent

Read-only comms; no programmatic message send.

P2 G-12 EMR read surfaces absent from v1

FHIR/EMR exists but not as token routes; needs a scoped read surface.

P2 G-6 Review answers/verdicts not readable

Packets are listable but the advise-and-consent verdict isn't exposed.

P2 G-4 Table formulas/views/audit unexposed

Deeper table features are UI-only.

P2 G-5 Form submit/list-submissions absent

Can read a form's schema but not submit to it or list responses via token.

P2 G-8 Commerce is MCP-only

create_invoice/quote/checkout/subscription have no REST twin — non-MCP clients can't reach them.

P2 G-14 Articles absent from v1

Blog/articles are session-only.

P2 G-15 No general config read

Only extension brand config is exposed.

Ready to build?

Mint a team token, make your first three calls, and point Claude or Cursor at the MCP server — the quickstart walks you through it in five minutes.

Open the quickstart

© 2026 MOS Labs LLC. All rights reserved.