List and explore Datarails Finance OS tables — discover what data is available and view one table's SCHEMA (fields, types, distinct values of a field) to understand its structure. For per-field STATISTICS (ranges, percentiles, null rates, cardinality) use the profile skill. Works with or without an open workbook — in Excel, "list my Datarails tables/models/fields" still routes HERE via the MCP connector (the Excel bridge's agent.list_functions lists workbook widgets, not org tables).
Explore Finance OS tables - list available tables, view schemas, and understand data structure.
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.
List all tables (no arguments):
mcp__datarails-finance-os__list_data_modelsid and an alias (empty when the table has
no business alias) — note both, they drive which schema/field tools to use nextView specific table (with table_id):
mcp__datarails-finance-os__list_aliased_fields
(business-friendly field aliases); otherwise use
mcp__datarails-finance-os__get_fields_by_id (capture each field's numeric id)mcp__datarails-finance-os__profile_numeric_fields(table_id)
(stats per numeric field) and mcp__datarails-finance-os__profile_categorical_fields(table_id, fields=[...]) — always pass an explicit fields list 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 overviewAlias 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):
mcp__datarails-finance-os__start_distinct_values_by_alias (aliased tables) or
mcp__datarails-finance-os__start_distinct_values_by_id (by-id fallback)get_distinct_values_result_by_alias /
get_distinct_values_result_by_id with the returned handle until ready
(async-fetch pattern); pass limit to the result tool"truncated": true in 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-level totals
field (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 lacks totals (pre-rollout cache),
re-run it once (a fresh run may return totals) and, if it still lacks them,
narrow or chunk until complete rather than totaling the prefix;
narrow the query per the guidance (more filters / fewer
columns / lower limit+offset paging) and re-fetch only when the rows
themselves are needed| 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 |
(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% |
.../dr-profile and /dr-anomalies/dr-profile - Deep profiling of numeric and categorical fields/dr-anomalies - Detect data quality issues/dr-query - Query specific records3fb5a24
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.