tables
List and explore Datarails Finance OS tables. Use to discover available data, view schemas, and understand table structure.
SKILL.mdskills/tables/SKILL.md
GitHubDatarails Table Discovery
Explore Finance OS tables - list available tables, view schemas, and understand data structure.
Workflow
Step 1: Verify Authentication
If any Datarails tool call fails with an authentication or connection error, tell the user to click the "+" button next to the prompt, select Connectors, find Datarails, and click Connect. Then STOP.
Step 2: Handle Request
List all tables (no arguments):
- Use
mcp__datarails-finance-os__list_data_models - Each entry carries both a numeric
idand analias(empty when the table has no business alias) — note both, they drive which schema/field tools to use next - Present tables in a formatted list with IDs, aliases, and names
- Group by category if available
View specific table (with table_id):
- If the table has an alias, use
mcp__datarails-finance-os__list_aliased_fields(business-friendly field aliases); otherwise usemcp__datarails-finance-os__get_fields_by_id(capture each field's numericid) - For a quick data overview, run
mcp__datarails-finance-os__profile_numeric_fields(table_id)(stats per numeric field) andmcp__datarails-finance-os__profile_categorical_fields(table_id, fields=[...])— always pass an explicitfieldslist of business dimensions taken from the schema just fetched (account-hierarchy levels, scenario, entity/department-like, dates); called bare the tool profiles upload/mapping metadata columns, not business data. The tool caps at 5 fields per call and silently drops the rest — an explicit list longer than 5 is still truncated, so batch into calls of ≤5 and merge the results before presenting them as the table's overview - Present schema in a readable table format
Alias coverage is per field, not per table. A table having an alias does not mean its fields are aliased — real orgs often expose only a handful of aliased fields (e.g. ~5 of ~185 on a mapped financials table), and the load-bearing fields (
amount,scenario, account groups, dates) are frequently not among them. Treat the alias/by-id choice per field:get_fields_by_id(<id>)returns every field with its numericidand itsalias(empty if none). Address a field by alias (via the*_by_aliastools) when it has one, else by numericid(via the*_by_idtools). By-id always works — never abandon the query because the aliased set is thin.
Async fetch — aggregations and distinct values run as start → poll.
start_aggregation_by_id/_by_aliasandstart_distinct_values_by_id/_by_aliastake the same arguments as the retired blocking calls (dimensions/metrics/filters; table id + field id, or alias + field alias) and return immediately with{"status": "pending", "handle": {...}}. Echo thathandleback verbatim to the matchingget_aggregation_result_by_*/get_distinct_values_result_by_*tool: a{"status": "running", "retry_after_seconds": N}response means poll again with the same handle after ~N seconds (≈5s) — it is not an error, and large jobs may take several polls; when ready, the result arrives in the familiar shape (for distinct values, passlimitto the result tool). An expired/unknown-handle error means restart with thestart_*tool. Transitional fallback: if thestart_*tools aren't available on the connector (older server), the blocking twinsget_aggregated_data_by_*/get_distinct_values_by_*still work with the same arguments.
Explore field values (with --field):
- Use
mcp__datarails-finance-os__start_distinct_values_by_alias(aliased tables) ormcp__datarails-finance-os__start_distinct_values_by_id(by-id fallback) - → poll the matching
get_distinct_values_result_by_alias/get_distinct_values_result_by_idwith the returnedhandleuntil ready (async-fetch pattern); passlimitto the result tool - Show unique values with counts
- Useful for understanding categorical data
- If a distinct-values call errors, fall back to sampling rows and dedupe client-side
- On
"truncated": truein any data response, the returned rows are an incomplete prefix — never present the prefix as complete or sum it for a total. Aggregation responses carry exact grand totals in a top-leveltotalsfield (computed across all groups, not just the returned prefix, so it is unaffected by truncation; it combines the per-group results, so it is exact only for SUM/COUNT/MIN/MAX — never read it for AVG, COUNT_UNIQUE or UNIQUE_VALUES) — read the total there; if a truncated aggregation lackstotals(pre-rollout cache), re-run it once (a fresh run may returntotals) and, if it still lacks them, narrow or chunk until complete rather than totaling the prefix; narrow the query per theguidance(more filters / fewer columns / lower limit+offset paging) and re-fetch only when the rows themselves are needed
Arguments
| Argument | Description |
|---|---|
| (none) | List all available tables |
<table_id> |
Show schema and summary for specific table |
--schema |
Show detailed schema (columns, types, constraints) |
--field <name> |
Show distinct values for a specific field |
Example Interactions
(Illustrative — table ids, names, and values below are invented; your org's tables and fields will differ.)
User: "/dr-tables"
📊 Finance OS Tables
| ID | Name | Alias |
|--------|-------------------------|------------|
| 999901 | GL Transactions | financials |
| 999902 | Budget Data | — |
| 999903 | Vendor Master | — |
...
User: "/dr-tables 999901"
📋 Table: GL Transactions (ID: 999901)
Fields: 24 (from the schema call — row counts are not available from any tool; never invent one)
Schema:
| Column | Type | Nullable | Description |
|-----------------|-----------|----------|----------------------|
| transaction_id | INTEGER | No | Primary key |
| account_code | VARCHAR | No | GL account number |
| amount | DECIMAL | No | Transaction amount |
| posting_date | DATE | No | Date posted |
...
User: "/dr-tables 999901 --field account_code"
🔍 Distinct Values: account_code (Table 999901)
Found 156 unique values:
| Value | Count | % of Total |
|------------|--------|------------|
| 4000-100 | 12,543 | 10.0% |
| 4000-200 | 8,291 | 6.6% |
| 5100-300 | 7,892 | 6.3% |
...
Tips
- Use this skill first when starting analysis to understand available data
- Table IDs (and aliases) are needed for other skills like
/dr-profileand/dr-anomalies - Check distinct values to understand categorical field cardinality
- The numeric/categorical field profiles give a quick data quality overview
Related Skills
- Connect via Connectors UI
/dr-profile- Deep profiling of numeric and categorical fields/dr-anomalies- Detect data quality issues/dr-query- Query specific records