| name | mlai-data-query |
| description | Query curated read-only MLAI backend data resources through the permissioned data access API |
| requires_auth | true |
| routing | {"use_when":"The user wants to READ curated MLAI backend data: counts, lists, or aggregates over Vibe Raising companies, startup/monthly update drafts, Content Factory jobs/runs, synced Linear issues/projects, Gmail/Slack sync metadata, GitHub integration status, financial records, organizations, or coworking booking records — or asks what data/tables/resources Roo can query.\n","avoid_when":"CREATING Linear issues (linear-meeting-actions). Luma event attendance (luma-events). Personal points/coworking bookings (mlai-points). Questions about files the user uploaded (chat). Roo never writes data or runs SQL.\n","examples":[{"text":"How many Vibe Raising companies do we have?","action":"query"},{"text":"Which Content Factory jobs failed this week?","action":"query"},{"text":"Show Linear issues synced for this startup","action":"query"},{"text":"What data resources can Roo query?","action":"catalog"}],"negative_examples":[{"text":"create a linear ticket from this thread","instead":"linear-meeting-actions"},{"text":"how many people registered for the AI safety event?","instead":"luma-events"},{"text":"how busy was the coworking space in may?","instead":"mlai-points"}]} |
| actions | [{"name":"catalog","description":"List the data resources/tables Roo is allowed to query."},{"name":"query","description":"Run a read-only list/count/aggregate query against one resource.","params":{"resource":{"type":"string","description":"Exact resource key if known (e.g. vibe_raising_companies, content_factory_jobs, linear_issues)."},"operation":{"type":"string","enum":["list","count","aggregate"],"description":"Query type."},"limit":{"type":"integer","description":"Max rows if the user asked for a specific number."}}}] |
MLAI Data Query Skill
Use this skill when a Slack user asks Roo to read curated backend data across the MLAI app, especially Vibe Raising, startup update artifacts, Content Factory state, Linear/Gmail/Slack sync metadata, GitHub integration status, financial metadata, organizations, and coworking booking records.
Roo must not write data and must not send SQL. It calls the backend's read-only data access API:
GET /api/v1/data/catalog/?requester_slack_id=<actual Slack user ID>
POST /api/v1/data/query/
The backend registry is the security contract. Each resource has explicit allow-listed fields, supported operations, filters, ordering, pagination limits, and role-scoped policies. There is no "admin bypass all" mode.
The catalog uses the same requester identity and policies, so it only includes
resources, operations, and fields the requesting Slack user can query.
Parameters
- action: Optional action. Use
catalog when the user asks what data/tables/resources are available.
- resource: Optional exact resource key, such as
vibe_raising_companies, monthly_update_drafts, content_factory_jobs, or linear_issues.
- operation: Optional operation. One of
list, count, or aggregate.
- fields: Optional list of allow-listed field names to return.
- filters: Optional list of filters. Each filter must use
{ "field": "...", "operator": "...", "value": ... }.
- group_by: Optional list of fields for aggregate queries.
- order_by: Optional list of
{ "field": "...", "direction": "asc|desc" }.
- limit: Optional positive integer. Roo caps default requests before the backend resource max.
- offset: Optional non-negative integer for pagination.
Query Rules
- The only supported filter operators are
eq, neq, gt, gte, lt, lte, in, and icontains.
icontains means case-insensitive substring search and only works on backend fields marked searchable.