Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,539Letters: 14Defects: 1,323counted 2 min ago
teppi

Server definition

Hash
sha256:c9e55ffe4d6f02dd845c8037e36a551c7bdc88a337f4d1c72b9f51db14dad92e
What it is
What a remote MCP server returned when asked what it offers: 17 tools

The blob, as servednamed by its sha256

{ "instructions": "# Précis — Finance Intelligence (MCP connector)\n\nYou are connected to Précis, a **read-only** FP&A data platform for your organisation: query financial statements and metrics, and inspect row-level detail. Reporting tools come in variants — `run_statement`/`run_metric` show the user a table; `run_statement_data`/`run_metric_data` return the raw figures for you to analyse or compute over. The rest of this document details the data model.\n\nYou cannot write plans, create scenarios, or change settings — those live in the\nPrécis app.\n\n## How the reporting tools are shaped\n\nThe two reporting tools come in variants — pick the one that matches what the\nuser needs:\n\n- **`run_statement` / `run_metric`** — render a formatted table for the user\n (the default; use when they want to *see* the figures).\n- **`run_statement_data` / `run_metric_data`** — return the raw figures for you\n to analyse, compute over, or transform (no table is shown to the user).\n\nFigures default to thousands with one decimal place unless you pass `scale` /\n`decimals` explicitly.\n\nFor a general P&L request, when the user has not chosen a statement and no\nactive report default applies, use `full_pnl` if it is listed under **Available\nStatements**. Respect an explicit request for a narrower statement or executive\nsummary; if `full_pnl` is not listed, choose the closest available P&L statement.\n\n**Always give every scenario a user-facing `alias`.** The `scenario` value is an\ninternal query key; `alias` is the column heading the user sees. Prefer concise\nfinance labels such as `Actuals`, `Budget`, `Variance`, `Var %`, or `Prior Year`.\nFor example: `scenarios=[{\"scenario\":\"actuals\",\"alias\":\"Actuals\"},\n{\"scenario\":\"actuals_vs_budget_pct\",\"alias\":\"Var %\"}]`. Never let raw keys\nsuch as `actuals_vs_budget_pct` become visible table headings.\n\n**Period filters are grain-tagged.** `period_start` / `period_end` take a period\ncode whose shape sets the grain: `2025-06` (month), `2025-Q2` (quarter), `2025`\n(fiscal year), `2025-W37` (week), `2025-06-14` (day). Both bounds must share a\ngrain. Month/quarter/fiscal-year work on every statement; week and day only where\nthe domain's data carries them — `list_dimensions` reports each dimension's grain,\nand an unsupported grain is rejected with the supported set named. Prior-year and\nprior-period comparisons work at any grain, and sum / avg / closing metrics roll\nup correctly at each grain.\n\nUtility tools — `list_scenarios`, `list_kpis`, `list_dimensions`,\n`search_hierarchy`, `list_inspection_sources`, `get_inspection_schema`,\n`inspect_rows`, `list_variants` — discover valid scenario ids, metric keys,\ndimensions, and row-level detail before composing a query. `list_dimensions`\ntells you which dimension keys exist (metadata only); `search_hierarchy` lists\nor searches a dimension's members — reach for it whenever you need valid\nmember ids.\n\n## Choosing run_statement vs run_metric\n\n- **Financial statement** (P&L, variance report, executive summary) →\n `run_statement`. Rows = statement lines (Revenue, Direct Cost, Gross Margin,\n …); columns = scenarios (Actuals, Budget, Variance, …).\n- **Metric breakdown** (revenue by project, utilisation by employee, headcount,\n GL account drill-down) → `run_metric`. Rows = a dimension; columns = metrics ×\n scenarios. Always pass `scenarios` explicitly, e.g.\n `scenarios=[{\"scenario\": \"actuals\", \"alias\": \"Actuals\"}]`, unless the user\n named another scenario.\n\nThe `period` and `cost_centre` dimensions work for every statement; other\ndimensions may only apply to compatible metrics.\n\n## Breaking down by a hierarchy\n\nA hierarchy dimension can be used as a breakdown: it shows **one level down** —\nthe filtered hierarchy node is the **Total**, its **immediate children** are the\nrows. Pass a filter selecting one node of the hierarchy together with the\nhierarchy as the dimension: `filters={<hierarchy>: <node_id>}` with\n`dimensions=[<hierarchy>]`. \"Drill into {X}\" means filter the hierarchy to X's\nnode and break down by that hierarchy. Use `search_hierarchy` to get a node's id.\nOne hierarchy at a time (the sole breakdown axis), a node filter is required, and\na time/calendar hierarchy cannot be broken down this way.\n\n## The data model\n\n## Available Statements\n\nThe `run_statement` tool accepts a `statement` parameter to control which metrics are included. When the user has not chosen a statement and no active report default applies, use `full_pnl` for a general P&L request. Respect an explicit request for a narrower or summary statement. When the user asks for \"the full picture\", \"with FTEs\", or a \"comprehensive\" view, use `full_pnl`. When they ask for a \"summary\" or \"executive\" view, use `executive_summary`.\n\n| Statement | Label | Description |\n|---|---|---|\n| `pnl` | P&L Statement | Standard P&L with revenue, costs, gross margin, contribution margin, and EBITDA. |\n| `statistical` | Statistical KPIs | Operational metrics: billable/total hours, utilisation rate, and FTE counts (average and closing). |\n| `ratios` | Ratios | Realised rate, revenue per FTE, and payroll cost per FTE — pricing, productivity, and cost efficiency indicators. |\n| `full_pnl` | Full P&L with KPIs | Complete view: P&L financials followed by statistical KPIs (hours, FTEs, utilisation) and per-FTE ratios. Use when the user asks for 'the full picture', 'metrics at the bottom', 'FTEs and hours', or a comprehensive report. |\n| `executive_summary` | Executive Summary | Compact board-level view: revenue, margins, EBITDA, total FTEs, utilisation, and revenue per FTE on a single page. |\n\n---\n\n## Available Scenarios\n\nPass scenarios as objects whose `scenario` field holds a visible key and whose `alias` is a concise, user-facing column label, e.g. `[{\"scenario\": \"actuals\", \"alias\": \"Actuals\"}, {\"scenario\": \"budget\", \"alias\": \"Budget 2026\"}]`. Always provide `alias`: without it, internal keys such as `actuals_vs_budget_pct` become visible table headings. Real scenarios come from `semantic.scenarios`; shifted and comparison scenarios are generated.\n\n### Data scenarios (stored data)\n\n| `scenario` | Scenario ID | Label | Status | Description |\n|---|---|---|---|---|\n| `actuals` | `ACTUALS` | Actuals | LOCKED | ACTUALS|base_year=0 |\n| `budget` | `BUD-2026` | Budget 2026 | APPROVED | BUDGET|base_year=2026 |\n| `forecast_q1` | `FC-2026-Q1` | Forecast 2026 Q1 Reforecast | DRAFT | FORECAST|base_year=2026 |\n\n### Shifted scenarios (auto-offset periods)\n\n| `scenario` | Base | Offset | Label | Description |\n|---|---|---|---|---|\n| `actuals_py` | `actuals` | -12 months | Actuals PY | Actuals shifted by -12 months. |\n| `actuals_pp` | `actuals` | -1 months | Actuals PP | Actuals shifted by -1 month. |\n| `budget_py` | `budget` | -12 months | Budget 2026 PY | Budget 2026 shifted by -12 months. |\n| `budget_pp` | `budget` | -1 months | Budget 2026 PP | Budget 2026 shifted by -1 month. |\n| `forecast_q1_py` | `forecast_q1` | -12 months | Forecast 2026 Q1 Reforecast PY | Forecast 2026 Q1 Reforecast shifted by -12 months. |\n| `forecast_q1_pp` | `forecast_q1` | -1 months | Forecast 2026 Q1 Reforecast PP | Forecast 2026 Q1 Reforecast shifted by -1 month. |\n\n**How shifted scenarios work:** Keep the requested period unchanged and use a visible shifted key such as `actuals_py`; the engine applies its offset.\n\n### Computed scenarios (calculated from other scenarios)\n\n| `scenario` | Formula | Label | Description |\n|---|---|---|---|\n| `actuals_vs_budget` | `actuals - budget` | Actuals vs Budget 2026 | Actuals vs Budget 2026: Actuals minus Budget 2026. |\n| `actuals_vs_budget_pct` | `(actuals - budget) / abs(budget) * 100` | Actuals vs Budget 2026 % | Actuals vs Budget 2026: Actuals minus Budget 2026. Percentage variance vs comparator. |\n| `actuals_vs_forecast_q1` | `actuals - forecast_q1` | Actuals vs Forecast 2026 Q1 Reforecast | Actuals vs Forecast 2026 Q1 Reforecast: Actuals minus Forecast 2026 Q1 Reforecast. |\n| `actuals_vs_forecast_q1_pct` | `(actuals - forecast_q1) / abs(forecast_q1) * 100` | Actuals vs Forecast 2026 Q1 Reforecast % | Actuals vs Forecast 2026 Q1 Reforecast: Actuals minus Forecast 2026 Q1 Reforecast. Percentage variance vs comparator. |\n| `budget_vs_actuals` | `budget - actuals` | Budget 2026 vs Actuals | Budget 2026 vs Actuals: Budget 2026 minus Actuals. |\n| `budget_vs_actuals_pct` | `(budget - actuals) / abs(actuals) * 100` | Budget 2026 vs Actuals % | Budget 2026 vs Actuals: Budget 2026 minus Actuals. Percentage variance vs comparator. |\n| `budget_vs_forecast_q1` | `budget - forecast_q1` | Budget 2026 vs Forecast 2026 Q1 Reforecast | Budget 2026 vs Forecast 2026 Q1 Reforecast: Budget 2026 minus Forecast 2026 Q1 Reforecast. |\n| `budget_vs_forecast_q1_pct` | `(budget - forecast_q1) / abs(forecast_q1) * 100` | Budget 2026 vs Forecast 2026 Q1 Reforecast % | Budget 2026 vs Forecast 2026 Q1 Reforecast: Budget 2026 minus Forecast 2026 Q1 Reforecast. Percentage variance vs comparator. |\n| `forecast_q1_vs_actuals` | `forecast_q1 - actuals` | Forecast 2026 Q1 Reforecast vs Actuals | Forecast 2026 Q1 Reforecast vs Actuals: Forecast 2026 Q1 Reforecast minus Actuals. |\n| `forecast_q1_vs_actuals_pct` | `(forecast_q1 - actuals) / abs(actuals) * 100` | Forecast 2026 Q1 Reforecast vs Actuals % | Forecast 2026 Q1 Reforecast vs Actuals: Forecast 2026 Q1 Reforecast minus Actuals. Percentage variance vs comparator. |\n| `forecast_q1_vs_budget` | `forecast_q1 - budget` | Forecast 2026 Q1 Reforecast vs Budget 2026 | Forecast 2026 Q1 Reforecast vs Budget 2026: Forecast 2026 Q1 Reforecast minus Budget 2026. |\n| `forecast_q1_vs_budget_pct` | `(forecast_q1 - budget) / abs(budget) * 100` | Forecast 2026 Q1 Reforecast vs Budget 2026 % | Forecast 2026 Q1 Reforecast vs Budget 2026: Forecast 2026 Q1 Reforecast minus Budget 2026. Percentage variance vs comparator. |\n| `actuals_vs_actuals_py` | `actuals - actuals_py` | Actuals vs Actuals PY | Actuals vs Actuals PY: Actuals minus Actuals PY. |\n| `actuals_vs_actuals_py_pct` | `(actuals - actuals_py) / abs(actuals_py) * 100` | Actuals vs Actuals PY % | Actuals vs Actuals PY: Actuals minus Actuals PY. Percentage variance vs comparator. |\n| `budget_vs_budget_py` | `budget - budget_py` | Budget 2026 vs Budget 2026 PY | Budget 2026 vs Budget 2026 PY: Budget 2026 minus Budget 2026 PY. |\n| `budget_vs_budget_py_pct` | `(budget - budget_py) / abs(budget_py) * 100` | Budget 2026 vs Budget 2026 PY % | Budget 2026 vs Budget 2026 PY: Budget 2026 minus Budget 2026 PY. Percentage variance vs comparator. |\n| `forecast_q1_vs_forecast_q1_py` | `forecast_q1 - forecast_q1_py` | Forecast 2026 Q1 Reforecast vs Forecast 2026 Q1 Reforecast PY | Forecast 2026 Q1 Reforecast vs Forecast 2026 Q1 Reforecast PY: Forecast 2026 Q1 Reforecast minus Forecast 2026 Q1 Reforecast PY. |\n| `forecast_q1_vs_forecast_q1_py_pct` | `(forecast_q1 - forecast_q1_py) / abs(forecast_q1_py) * 100` | Forecast 2026 Q1 Reforecast vs Forecast 2026 Q1 Reforecast PY % | Forecast 2026 Q1 Reforecast vs Forecast 2026 Q1 Reforecast PY: Forecast 2026 Q1 Reforecast minus Forecast 2026 Q1 Reforecast PY. Percentage variance vs comparator. |\n\n**Additional comparisons available on demand.** The table above is a curated default. The engine resolves `{left}_vs_{right}` and `{left}_vs_{right}_pct` keys where each side uses only a real or shifted scenario visible above. Visible compatibility aliases: `prior_year`, `prior_period`. Use these when the user's question implies a cross-scenario time-shifted comparison.\n\n---\n\n## Available Dimensions\n\nEach key below is a catalogue dimension name. Use the **same** key in both `filters` and `dimensions` — never a source-view column name.\n\n### Quick Reference — Valid Keys per Domain\n\n**`gl`**\n- Metrics: `gl_amount`\n- Dimension keys (`filters` and `dimensions`): `account`, `account_type`, `calendar`, `cost_centre`, `department`, `division`, `fiscal_year`, `fs_line`, `org_structure`, `period`, `quarter`, `solution_portfolio`\n\n**`gl_federated`**\n- Metrics: `federated_debit_amount`, `federated_credit_amount`, `federated_net_amount`, `federated_revenue_amount`\n- Dimension keys (`filters` and `dimensions`): `account`, `account_type`, `calendar`, `cost_centre`, `department`, `division`, `fiscal_year`, `fs_line`, `org_structure`, `period`, `quarter`, `solution_portfolio`\n- Axis-only keys (valid in `dimensions` only, not `filters`): `posting_date`, `supplier_id`\n\n**`intercompany`**\n- Metrics: `intercompany_amount`\n- Dimension keys (`filters` and `dimensions`): `calendar`, `cost_centre`, `counterparty_cc`, `counterparty_department`, `counterparty_division`, `department`, `division`, `fiscal_year`, `org_structure`, `period`, `quarter`, `solution_portfolio`\n\n**`payroll`**\n- Metrics: `headcount`, `gross_salary`, `employer_contributions`, `bonus_cost`, `total_payroll_cost`\n- Dimension keys (`filters` and `dimensions`): `calendar`, `cost_centre`, `department`, `division`, `employee`, `fiscal_year`, `grade`, `org_structure`, `period`, `quarter`, `solution_portfolio`\n\n**`pipeline`**\n- Metrics: `pipeline_value`, `weighted_pipeline`, `open_count`, `avg_deal_size`, `bookings`, `won_count`, `lost_count`, `win_rate`\n- Dimension keys (`filters` and `dimensions`): `calendar`, `crm_account`, `crm_industry`, `crm_region`, `crm_segment`, `fiscal_year`, `period`, `quarter`\n\n**`pnl`**\n- Metrics: `revenue`, `direct_cost`, `indirect_cost`, `sga`, `billable_hours`, `total_hours`, `avg_fte_billable`, `avg_fte_overhead`, `closing_fte_billable`, `closing_fte_overhead`, `gross_margin`, `gross_margin_pct`, `contribution_margin`, `ebitda`, `ebitda_margin_pct`, `avg_fte_total`, `utilisation_rate`, `realised_rate`, `revenue_per_fte`, `payroll_cost_per_fte`\n- Dimension keys (`filters` and `dimensions`): `calendar`, `cost_centre`, `department`, `division`, `fiscal_year`, `org_structure`, `period`, `quarter`, `solution_portfolio`\n\n**`project_economics`**\n- Metrics: `project_revenue`, `project_cost`, `project_margin`, `project_margin_pct`, `project_billings`, `project_billable_hours`, `project_worked_hours`, `realised_bill_rate`, `project_wip`, `project_percent_complete`, `project_cum_revenue`, `project_cum_cost`, `project_cum_billed`\n- Dimension keys (`filters` and `dimensions`): `calendar`, `client`, `client_portfolio`, `cost_centre`, `department`, `division`, `fiscal_year`, `org_structure`, `period`, `project`, `project_status`, `project_type`, `quarter`, `solution_portfolio`\n\n**`timesheets`**\n- Metrics: `hours_worked`, `hours_billable`, `hours_non_billable`, `ts_utilisation_rate`\n- Dimension keys (`filters` and `dimensions`): `calendar`, `client`, `client_portfolio`, `cost_centre`, `day`, `department`, `division`, `employee`, `fiscal_year`, `grade`, `org_structure`, `period`, `project`, `project_status`, `project_type`, `quarter`, `solution_portfolio`, `week`\n\n**`worklog_federated`**\n- Metrics: `federated_hours_worked`, `federated_billable_hours`, `federated_billable_amount`, `federated_utilisation`\n- Dimension keys (`filters` and `dimensions`): `calendar`, `client`, `client_portfolio`, `cost_centre`, `department`, `division`, `employee`, `fiscal_year`, `grade`, `org_structure`, `period`, `project`, `project_status`, `project_type`, `quarter`, `solution_portfolio`\n- Axis-only keys (valid in `dimensions` only, not `filters`): `activity_type`, `approval_status`, `source_system`, `task_code`, `work_date`\n\n### Dimension Reference\n\nThe same key works as a filter and as a breakdown axis.\n\n| Dimension key | Type | Example |\n|---|---|---|\n| `cost_centre` | leaf | `{\"cost_centre\": \"CC-CLOUD-01\"}` |\n| `counterparty_cc` | leaf | `{\"counterparty_cc\": \"<Counterparty Cost Centre>\"}` |\n| `account` | leaf | `{\"account\": \"4100\"}` |\n| `employee` | leaf | `{\"employee\": \"42\"}` |\n| `project` | leaf | `{\"project\": \"6\"}` |\n| `period` | leaf | `{\"period\": \"2025-03\"}` |\n| `crm_account` | leaf | `{\"crm_account\": \"<CRM Account>\"}` |\n| `client` | leaf | `{\"client\": \"<Client>\"}` |\n| `day` | leaf | `{\"day\": \"<Day>\"}` |\n| `week` | leaf | `{\"week\": \"<Week>\"}` |\n| `department` | derived (from cost_centre) | `{\"department\": \"<Department>\"}` |\n| `division` | derived (from cost_centre) | `{\"division\": \"<Division>\"}` |\n| `counterparty_department` | derived (from counterparty_cc) | `{\"counterparty_department\": \"<Counterparty Department>\"}` |\n| `counterparty_division` | derived (from counterparty_cc) | `{\"counterparty_division\": \"<Counterparty Division>\"}` |\n| `fs_line` | derived (from account) | `{\"fs_line\": \"<Financial Statement Line>\"}` |\n| `account_type` | derived (from account) | `{\"account_type\": \"<Account Type>\"}` |\n| `grade` | derived (from employee) | `{\"grade\": \"<Grade>\"}` |\n| `project_type` | derived (from project) | `{\"project_type\": \"<Project Type>\"}` |\n| `project_status` | derived (from project) | `{\"project_status\": \"<Project Status>\"}` |\n| `crm_industry` | derived (from crm_account) | `{\"crm_industry\": \"<Industry (CRM)>\"}` |\n| `crm_segment` | derived (from crm_account) | `{\"crm_segment\": \"<Segment>\"}` |\n| `crm_region` | derived (from crm_account) | `{\"crm_region\": \"<Region>\"}` |\n| `quarter` | derived (from period) | `{\"quarter\": \"<Quarter>\"}` |\n| `fiscal_year` | derived (from period) | `{\"fiscal_year\": \"<Fiscal Year>\"}` |\n| `org_structure` | ragged hierarchy | `{\"org_structure\": \"<value>\"}` — use `search_hierarchy` |\n| `solution_portfolio` | ragged hierarchy | `{\"solution_portfolio\": \"<value>\"}` — use `search_hierarchy` |\n| `calendar` | ragged hierarchy | `{\"calendar\": \"<value>\"}` — use `search_hierarchy` |\n| `client_portfolio` | ragged hierarchy | `{\"client_portfolio\": \"<node_id>\"}` — use `search_hierarchy` |\n\n### Filtering Rules\n\n1. **Pick the filter key that matches the user's intent.** If the user asks about a department, use `department` — not `cost_centre`. The quick reference above lists every valid key per domain.\n2. **Leaf and derived filters** use plain values. Example: `{\"cost_centre\": \"CC-CLOUD-01\"}` or `{\"department\": \"Cloud & Infrastructure\"}`.\n3. **Ragged hierarchy filters** use node_id values. Call `search_hierarchy` to find the exact value. Example: `{\"org_structure\": \"Cloud & Infrastructure\"}`.\n4. **Axis-only breakdown keys** can be used only in `dimensions`, not in `filters`. They are source-only columns on federated domains.\n\nUse `search_hierarchy` to find valid *values* for any filter key. Do NOT use it to discover filter key names — the tables above are authoritative.\n\nUse `list_kpis` for metric descriptions, formats, and available dimensions.\n\n## Presenting results\n\n- Resolve ambiguous requests yourself — infer the period, scenario, and\n comparison basis from the conversation and FP&A norms rather than asking the\n user to specify what you can reasonably infer.\n- Present the figures and findings directly. Do not narrate which tools you\n called — the user sees the result, not the plumbing.\n- Never fabricate figures or account codes. If a query returns no data, say so.\n", "tools": [ { "description": "Fetch one data feed's full configuration: source, target dataset, schedule, and extract parameters.", "inputSchema": { "additionalProperties": false, "properties": { "binding_id": { "title": "Binding Id", "type": "string" } }, "required": [ "binding_id" ], "title": "get_binding", "type": "object" }, "name": "get_binding", "outputSchema": null }, { "description": "Get the column schema for an inspection source.", "inputSchema": { "additionalProperties": false, "properties": { "source_key": { "title": "Source Key", "type": "string" } }, "required": [ "source_key" ], "title": "get_inspection_schema", "type": "object" }, "name": "get_inspection_schema", "outputSchema": null }, { "description": "Fetch one data load's full detail by load_id — timestamps, status, rows landed, and any error message.", "inputSchema": { "additionalProperties": false, "properties": { "load_id": { "title": "Load Id", "type": "string" } }, "required": [ "load_id" ], "title": "get_load_status", "type": "object" }, "name": "get_load_status", "outputSchema": null }, { "description": "Inspect the row-level detail behind a figure, from an enabled inspection source. Returns a capped sample for reasoning plus a grid for the user.", "inputSchema": { "additionalProperties": false, "properties": { "columns": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "default": null, "title": "Columns" }, "filename": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Filename" }, "filters": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "title": "Filters" }, "limit": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Limit" }, "period_end": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Period End" }, "period_start": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Period Start" }, "scenario_id": { "title": "Scenario Id", "type": "string" }, "sheet_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Sheet Name" }, "source_key": { "title": "Source Key", "type": "string" } }, "required": [ "source_key", "scenario_id" ], "title": "inspect_rows", "type": "object" }, "name": "inspect_rows", "outputSchema": null }, { "description": "List the configured data feeds (ingestion bindings) with their schedule — which datasets load, from where, how often.", "inputSchema": { "additionalProperties": false, "properties": { "source_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Source Id" }, "target": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Target" } }, "title": "list_bindings", "type": "object" }, "name": "list_bindings", "outputSchema": null }, { "description": "List the dimensions defined in the model — keys, labels, and kinds (leaf / derived / ragged hierarchy). Catalogue metadata only; use search_hierarchy to list a dimension's members.", "inputSchema": { "additionalProperties": false, "properties": {}, "title": "list_dimensions", "type": "object" }, "name": "list_dimensions", "outputSchema": null }, { "description": "List the row-level sources available for inspection.", "inputSchema": { "additionalProperties": false, "properties": {}, "title": "list_inspection_sources", "type": "object" }, "name": "list_inspection_sources", "outputSchema": null }, { "description": "Browse the metric catalogue — metric keys, formats, domains, and the dimensions available per metric.", "inputSchema": { "additionalProperties": false, "properties": {}, "title": "list_kpis", "type": "object" }, "name": "list_kpis", "outputSchema": null }, { "description": "List data-load attempts from the ingestion audit trail — when each dataset landed, with what status. Answers \"is April in yet?\" / \"when was this data last loaded?\".", "inputSchema": { "additionalProperties": false, "properties": { "binding_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Binding Id" }, "dataset_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Dataset Id" }, "limit": { "default": 50, "title": "Limit", "type": "integer" }, "period": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Period" }, "status": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Status" } }, "title": "list_load_history", "type": "object" }, "name": "list_load_history", "outputSchema": null }, { "description": "List the available planning scenarios and their status.", "inputSchema": { "additionalProperties": false, "properties": {}, "title": "list_scenarios", "type": "object" }, "name": "list_scenarios", "outputSchema": null }, { "description": "List the what-if variants of a scenario.", "inputSchema": { "additionalProperties": false, "properties": { "scenario_id": { "title": "Scenario Id", "type": "string" } }, "required": [ "scenario_id" ], "title": "list_variants", "type": "object" }, "name": "list_variants", "outputSchema": null }, { "description": "Call this first. Returns how to use Précis over this connector: the data model (scenarios, metrics, statements, dimensions), the reporting-tool variants, and how to build charts. Read it before composing queries.", "inputSchema": { "properties": {}, "type": "object" }, "name": "precis_orientation", "outputSchema": null }, { "description": "Break one or more metrics down by a dimension — revenue by project, utilisation by employee, headcount trends, GL account drill-down. Rows are the dimension; columns are metrics × scenarios. Pass `scenarios` explicitly and give every scenario a concise, user-facing `alias` such as Actuals, Budget, Variance, or Var %. Shows the user a formatted table.", "inputSchema": { "additionalProperties": false, "properties": { "decimals": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Decimals" }, "dimensions": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "default": null, "title": "Dimensions" }, "filename": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Filename" }, "filters": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "title": "Filters" }, "layout": { "default": "report", "title": "Layout", "type": "string" }, "metrics": { "items": { "type": "string" }, "title": "Metrics", "type": "array" }, "overwrite": { "default": false, "title": "Overwrite", "type": "boolean" }, "period_end": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Period End" }, "period_start": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Period Start" }, "scale": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Scale" }, "scenarios": { "anyOf": [ { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, { "type": "null" } ], "default": null, "title": "Scenarios" }, "sheet_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Sheet Name" }, "target": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Target" } }, "required": [ "metrics" ], "title": "run_metric", "type": "object" }, "name": "run_metric", "outputSchema": null }, { "description": "Break one or more metrics down by a dimension — revenue by project, utilisation by employee, headcount trends, GL account drill-down. Rows are the dimension; columns are metrics × scenarios. Pass `scenarios` explicitly and give every scenario a concise, user-facing `alias` such as Actuals, Budget, Variance, or Var %. Returns the raw figures (and a `data_ref`) for your own analysis or to build a chart — pass the `data_ref` to eval_chart_transform. Does not show the user a table.", "inputSchema": { "additionalProperties": false, "properties": { "decimals": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Decimals" }, "dimensions": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "default": null, "title": "Dimensions" }, "filename": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Filename" }, "filters": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "title": "Filters" }, "layout": { "default": "report", "title": "Layout", "type": "string" }, "metrics": { "items": { "type": "string" }, "title": "Metrics", "type": "array" }, "overwrite": { "default": false, "title": "Overwrite", "type": "boolean" }, "period_end": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Period End" }, "period_start": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Period Start" }, "scale": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Scale" }, "scenarios": { "anyOf": [ { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, { "type": "null" } ], "default": null, "title": "Scenarios" }, "sheet_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Sheet Name" }, "target": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Target" } }, "required": [ "metrics" ], "title": "run_metric", "type": "object" }, "name": "run_metric_data", "outputSchema": null }, { "description": "Run a financial statement — P&L, variance report, or executive summary. Rows are statement lines (Revenue, Direct Cost, Gross Margin, …); columns are scenarios. Supports an optional dimension breakdown (e.g. by period or cost centre). For an unspecified general P&L, prefer `full_pnl` when it is listed by precis_orientation. Give every scenario a concise, user-facing `alias` such as Actuals, Budget, Variance, or Var %. Shows the user a formatted table.", "inputSchema": { "additionalProperties": false, "properties": { "decimals": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Decimals" }, "dimensions": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "default": null, "title": "Dimensions" }, "filename": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Filename" }, "filters": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "title": "Filters" }, "layout": { "default": "report", "title": "Layout", "type": "string" }, "overwrite": { "default": false, "title": "Overwrite", "type": "boolean" }, "period_end": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Period End" }, "period_start": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Period Start" }, "scale": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Scale" }, "scenarios": { "anyOf": [ { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, { "type": "null" } ], "default": null, "title": "Scenarios" }, "sheet_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Sheet Name" }, "statement": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Statement" }, "target": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Target" } }, "title": "run_statement", "type": "object" }, "name": "run_statement", "outputSchema": null }, { "description": "Run a financial statement — P&L, variance report, or executive summary. Rows are statement lines (Revenue, Direct Cost, Gross Margin, …); columns are scenarios. Supports an optional dimension breakdown (e.g. by period or cost centre). For an unspecified general P&L, prefer `full_pnl` when it is listed by precis_orientation. Give every scenario a concise, user-facing `alias` such as Actuals, Budget, Variance, or Var %. Returns the raw figures (and a `data_ref`) for your own analysis or to build a chart — pass the `data_ref` to eval_chart_transform. Does not show the user a table.", "inputSchema": { "additionalProperties": false, "properties": { "decimals": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Decimals" }, "dimensions": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "default": null, "title": "Dimensions" }, "filename": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Filename" }, "filters": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "title": "Filters" }, "layout": { "default": "report", "title": "Layout", "type": "string" }, "overwrite": { "default": false, "title": "Overwrite", "type": "boolean" }, "period_end": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Period End" }, "period_start": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Period Start" }, "scale": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Scale" }, "scenarios": { "anyOf": [ { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, { "type": "null" } ], "default": null, "title": "Scenarios" }, "sheet_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Sheet Name" }, "statement": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Statement" }, "target": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Target" } }, "title": "run_statement", "type": "object" }, "name": "run_statement_data", "outputSchema": null }, { "description": "Search the dimension hierarchies (cost centres, accounts, …) to find valid codes and ids before composing a query.", "inputSchema": { "additionalProperties": false, "properties": { "dimension": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Dimension" }, "limit": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Limit" }, "query": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Query" } }, "title": "search_hierarchy", "type": "object" }, "name": "search_hierarchy", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:c9e55ffe4d6f02dd845c8037e36a551c7bdc88a337f4d1c72b9f51db14dad92e | sha256sum