Skip to main content

fynsight: MCP server for DATEV

de.fynsight/datevVersion 1.0.1

DATEV financial data for AI assistants: P&L, KPIs, bookings, budgets and monthly reporting.

Status

Responds377 msAnswered our handshake without sign-in.

Registry data may be out of date

We could not refresh it, so this page shows the last copy.
Last checked
Nov 14, 2026, 14:24 UTC
Latency
377 ms
Remotes responding
1 of 1
Sign-in
No sign-in
Hosting
Hosted outside the EU (detected)
Registry data as of
Nov 14, 2026, 21:12 UTC

Data from the official MCP Registry, checked by run.zero. How we check

Connect

Streamable HTTP
https://mcp.fynsight.de/mcpResponds377 ms
No sign-in

Claude Code

claude mcp add --transport http datev https://mcp.fynsight.de/mcp

Claude Desktop and claude.ai

Settings > Connectors > Add custom connector
Name: datev
Remote MCP server URL: https://mcp.fynsight.de/mcp

Cursor

{
  "mcpServers": {
    "datev": {
      "url": "https://mcp.fynsight.de/mcp"
    }
  }
}

VS Code

code --add-mcp '{"name":"datev","type":"http","url":"https://mcp.fynsight.de/mcp"}'

Built your own server? run.zero hosts MCP servers on European infrastructure.

Host your own MCP server on run.zero

Tools

29 tools

Tools of fynsight: MCP server for DATEV
Read-only
Idempotent
Open world
aggregate_pnl_by_cost_centerP&L metrics per cost center and period across the full history, paginated over cost_center via after_cost_center and pagination.next_cursor (with categories each row counts several times against the page budget; the response states the weight). Amounts are result effect (revenue +, expense −). `revenue` is the sum of all labels in the tenant's revenue group; sales deductions and penalties booked on revenue-group labels are already netted in. include_categories=true adds the split per label (category_totals), and revenue is then the sum of the revenue-group categories. granularity quarter, year or total returns the finished rolled-up figures. available_range gives the overall time range. Hidden cost centers stay included and are marked as hidden on each row. Every number in cost_centers must be a known cost center (unknown numbers are rejected); a known cost center without P&L bookings in the range is listed in `warnings`. period_from/period_to must be valid (YYYY-MM or YYYY-MM-DD) and period_from must not be after period_to.Not declaredYesNot declaredNo
answer-clarificationRecords the answer to an open clarification question raised for an anomaly case. It does NOT approve any correction (corrections are approved in the app).NoNoNoNo
compute_aggregatesAggregates bookings and account balances (sum, avg, mom, yoy, cumulative, share, count) by period, cost center, account or category. Amounts are ledger amounts (sign_convention "ledger", see sign_convention_note): revenue and expense are both positive as booked, a negative value reduces the account. Sums are therefore not result figures; get_periodic_summaries and aggregate_pnl_by_cost_center return the result effect (revenue +, expense −). A group that contains revenue and expense accounts has mixes_revenue_and_expense=true, and the response adds a warning. With group_by=account every sub-account is its own group; the group key carries account, sub_account (null = none) and account_ref. totals.sum covers all periods in scope regardless of granularity. mom/yoy compare with the previous bucket inside the requested window; the calendar previous month comes from get_periodic_summaries with include_previous. Groups are paged via after_group and pagination.next_cursor. available_range gives the tenant's full data range; an empty page does not mean there is no data. scope.pnl_reconciled=true means each month was cross-checked against the P&L; a warning then names period, both amounts and the difference. With text_query, cost_centers or categories the result is a subset by design and not reconciled. With text_query, scope.text_match gives matched_sum, unfiltered_sum (same accounts, cost centers and months without the search term) and matched_share_pct.Not declaredYesNot declaredNo
create-budget-planCreates a new budget plan. The version is incremented automatically for plans with the same name and year. A plan with type=forecast holds the ACTUAL values of the already closed months plus the forecast for the remaining months of the year; otherwise year and YTD comparisons against actuals are wrong. The closed months can be read via get_periodic_summaries (category_totals) and are loaded together with the forecast via upload-budget-entries as category entries.NoNoNoNo
draft-report-commentCreates an AI DRAFT explanation (status ai_draft) for a position of the month report. The draft has a short form (`summary`: one sentence saying why the number deviates, no figures) and an optional `detail` (may name single amounts from the material). The material is the position's figures plus the notes and clarification answers of the decided cases of the run that belong to it. Drafts are created only on request (here or by a click in the app), never automatically; list-comment-status shows which positions are still open. A draft is never published automatically: a person reviews and publishes it in the app. The response returns `summary` and `detail`. An existing explanation is never overwritten silently (see replace_published).YesNoNoNo
export-reportGenerates a structured financial report as JSON. Pass either period (one month) or date_from/date_to (a range), never both; invalid or contradictory values are rejected with an error. report_type=pnl: the P&L lines of the period or range as one list ordered by period, without a period argument ALL months (a long history can be large). report_type=category-breakdown: summary figures and category totals. Default is the latest month with data and the output carries one month. For a range of several months it returns months[] (one entry per month, each with summary, categories and category_totals) plus total (the sum of the months with summary re-derived from the summed buckets, not added up from the monthly summaries). report_type=kpi-dashboard: the KPI values with change against the previous month. Default is the latest month with data; for a range of several months it returns months[] with the KPIs of each month, at most 12 months per call (more is rejected). category-breakdown and kpi-dashboard answer with an error naming the available data range when the period or range has no data; in a multi-month range, months without data are listed in missing_periods.Not declaredYesNot declaredNo
generate-month-reportCreates the first report draft of a run whose figures a person has already approved in the app (run status approved). Any other status is rejected with the status named; regenerating an existing report is not possible here (it can mark edited texts for review or drop them) and stays in the app. Fynsight's own AI writes the driver sentences of the headlines and the three summary sentences from the computed figures and the published explanations, so the figures and explanation texts of this period are sent to Fynsight's AI provider (see data flows in the documentation). The result is a DRAFT: it is reviewed, published and signed off in the app. If building the report fails, the run goes to failed (a new run and a new approval are then needed). Returns the deeplink to the report.YesNoNoNo
get_all_accountsLists the tenant's accounts with label, category, sub_account, account_ref ("8400" or "8400/130", the notation of the accounts filters in other tools), is_pnl_account, is_revenue_account and knw_row_number. Each sub-account is its own row. Categories are the tenant's own P&L labels and balance-sheet categories. Filters: exact category, account number range (account_from/account_to) and is_pnl (P&L vs. balance sheet accounts). Without limit every matching account is returned (paginated internally, no row cap); with limit the response reports limit and truncated=true when more accounts exist.Not declaredYesNot declaredNo
get_budget_vs_actualBudget (Soll) vs. actual (Ist) with variance and YTD summary for one plan (plan_id from list_budget_plans). detail=summary omits period_rows and row_count. Besides the per-category rows (period_rows, ytd_summary) the response carries derived P&L metrics for plan and actual: `metrics` (per period) and `metrics_ytd` (all periods of the response) with revenue, other_income, cogs, opex, depreciation, financial, tax, gross_margin, ebitda, ebit, ebt and net_income (= Jahresueberschuss), each with budget, actual, variance and variance_pct. They are computed from tenant_config.pnl_labels exactly like get_periodic_summaries.metrics. `unmapped_categories` lists categories with amounts but no subtotal_group (not part of any metric). With cost_center set, actuals of the metrics are tenant-wide (see metrics_note). Account level (granularity=account): one row per account/sub-account of the plan, key "8400" (the main account = sub-account 000, compared against the actuals of the main account only) or "8400/130" (a specific sub-account, compared against that sub-account only); the two never overlap and are not summed. All granularities (category, account and BAB row) use the result view: revenue positive, expense negative, plan and actual alike (budget plans stored with positive expenses are normalized), so the account rows of a category add up to that category's value and a positive variance always means better for the result.Not declaredYesNot declaredNo
get_cost_center_listLists all cost centers of the tenant with id and name, plus total_count and hidden_count. Rows carry `hidden: true` when the tenant has hidden that cost center in the app; it still holds bookings and still counts towards company-wide figures, but is no longer selectable.Not declaredYesNot declaredNo
get_metric_trendTime series of a single named metric across periods, with month-over-month and year-over-year change per point (value, change, change_percentage, yoy_change, yoy_change_percentage, compared_period). The metric is one bucket (revenue, other_income, cogs, opex, depreciation, financial, tax), one derived P&L aggregate (gross_margin, ebitda, ebit, ebt, net_income) or one P&L category from tenant_config.pnl_labels. get_periodic_summaries returns all metrics of a period at once (including sort_order and include_previous); compute_aggregates covers account/cost-center/category sums with grouping, share or cumulative but cannot compute the derived aggregates (ebitda etc.). Time range: `periods` (a count of the most recent periods, default 12) or `date_from`/`date_to`; not a period list as in other tools.Not declaredYesNot declaredNo
get_periodic_summariesP&L summaries per period: metrics (EBIT, EBITDA, margins, depreciation, financial, tax) and category_totals, as result effect (revenue +, expense −). Each summary's metrics.category_totals_sort_order gives the GuV-Explorer display order per category (lower sorts first). granularity quarter, year or total sums the months in the tool and re-derives the metrics. Per-account balances are omitted by default; include_account_totals=true adds `totals` per summary. include_previous compares each summary with its CALENDAR predecessor (loaded automatically; granularity total has none): previous_period, previous_comparison (per headline figure: current, previous, delta_absolute, delta_percentage) and delta_category_totals (same keys as category_totals, with label_ids, current, previous and the deltas). A category without bookings in a period that has computed metrics counts as 0, not null; delta_percentage is null when the previous value is 0. All deltas are null (not 0) when a side has no computed metrics. For quarter/year, if the bucket or its predecessor covers fewer months than the bucket length (3/12; see months_covered and previous_months_covered), all deltas are null and a warning names the period. Every response carries available_range ({from, to}, YYYY-MM); requested months without a ledger row are listed in missing_periods and named in a warning. An invalid period such as 2026-13 is rejected.Not declaredYesNot declaredNo
get-month-run-statusReturns the status of a Monatsreporting run (month-end close): its phase plus the number of open anomaly cases, open clarification questions and open follow_up checks (follow_ups_open). period (YYYY-MM) selects the active run of that month (not superseded or failed); without a run for it the answer says so. run_id takes precedence over period; with neither, the most recent run is returned. READ ONLY. A run is started with start-month-run; approving, publishing and closing happen only in the app.Not declaredYesNot declaredNo
get-variance-bridgeResult bridge for a month: EBITDA, EBIT and net income from a comparison value to actual, step by step per P&L category. READ ONLY. compare_to: previous_month, previous_quarter_month, previous_year or budget (plan_id optional, only with budget; default is the active plan of the year of the period, without one the call fails with NO_ACTIVE_BUDGET_PLAN). All amounts are result impact (revenue +, expense -, positive = improves the result; deltas = actual - comparison). start/end come from the computed metrics, the steps from category deltas, check.reconciles proves they add up (on unrounded values). unassigned = result change no category of this metric explains (labels without id or subtotal group, accounts without label); excluded lists what is left out (unlabeled_accounts, labels_without_group) and a warning appears when either is non-empty. rounding_difference = end - (start + steps + other + unassigned) on the rounded figures. Steps carry sort_order (P&L order) and auffaellig; the list is sorted by absolute delta. Small steps (below other_threshold, share of the absolute total change, default 0.05) are collapsed into other with their list.Not declaredYesNot declaredNo
list_budget_plansLists the tenant's budget plans with id (the plan_id that get_budget_vs_actual takes), name, year, version, status and type, optionally filtered by year and status.Not declaredYesNot declaredNo
list_organizationsList every organisation the authenticated user is a member of. Each entry reports the user's role, whether the org is a holding (is_holding, derived from its holding entitlement), and which org is currently active for this MCP session (is_active=true). parent_organization_id holds the parent organisation's ID for a child organisation, and null otherwise; parent_relation says what kind of child it is: 'client' (client tenant of a service provider) or 'subsidiary' (subsidiary of a holding), null for an organisation without a parent.Not declaredYesNot declaredNo
list-comment-statusFor a Monatsreporting run, lists every P&L position and whether it is commented, has an AI draft, or is still open. Covers P&L lines, summary metrics, cost centers and the total, each with a shareable deeplink and the published/draft comment text (body). Optional filters target_type and state. READ ONLY.Not declaredYesNot declaredNo
list-manual-adjustmentsLists the tenant's manual correction bookings. status is one of pending, approved, rejected or superseded; period (YYYY-MM or YYYY-MM-DD) restricts the list to one month. Without filters all statuses are returned.Not declaredYesNot declaredNo
list-open-anomaly-casesLists the anomaly cases of a Monatsreporting run: view summary (default) gives counts, sums and top cases, view cases lists single cases, filtered and paginated. status: open (default), decided (resolved/dismissed) or all. by_cost_center entries carry hidden (hidden in the app) and are never dropped. Amounts (actual, reference, delta = actual - reference, delta_pct) are taken unchanged from the detection rules; only budget_deviation and mom_outlier carry delta (sign_flip: actual = current, duplicate_suspicion: actual = amount, missing_account: no amount). sum_abs_delta is per kind, never mixed across kinds (null plus cases_without_delta for kinds without delta). commentary is the case note (Reporting-Vermerk): material for the comment of the position while the case is open, the short form of that comment once a person accepts it in the app. The report shows comments (list-comment-status), not case notes. commentary_source: ai = AI review, user = a person, null = older case. A follow_up case checks an earlier watch item: watch holds the original statement and the result (recurred true/false/null; position_missing true = position not assessable this month, which is not "did not recur"). Each case carries clarification (open or answered question with context, suggestions, answer) or null; the summary counts open_clarifications and follow_ups. updated_at is the last change of the case, not the decision time.Not declaredYesNot declaredNo
note-anomaly-caseWrites the reporting note (Reporting-Vermerk) of an open anomaly case, e.g. "one-off consulting invoice". The month report shows explanations, not case notes: once the case is decided in the app, the note becomes material from which the explanation draft of the position is written. It changes ONLY this note, never the case status; deciding a case (resolved/dismissed) happens in the app. A case that already has a note is rejected (CASE_NOTE_EXISTS, existing_note returned) unless replace is true, which overwrites the existing note. Only possible before the figures are approved (run status up to awaiting_approval); from approved on, and for decided cases, the call is rejected. The internal processing note is never touched.YesNoYesNo
propose-manual-adjustmentProposes a manual correction booking (Korrekturbuchung) for a month, e.g. an unbooked invoice or an anomaly correction on a specific account and cost center. This does NOT post to the ledger: it creates a PENDING proposal that a human approves in the web app.NoNoNoNo
propose-transaction-correctionProposes a correction to an EXISTING ledger booking: wrong cost center, wrong account, wrong amount or wrong month. This does NOT change the original booking and does NOT post to the ledger: it creates a PENDING proposal that a human approves in the web app. On approval a reversal of the original booking plus a corrected re-booking are written. The transaction id is the `id` of a row from `search_cost_center_transactions`. A booking that does not exist yet is proposed with `propose-manual-adjustment`.NoNoNoNo
query_kpisCalculates the values of the tenant's active KPIs for a period: value, unit, format_type, previous_value, change and change_percentage (month-over-month change) and positive_trend_is_good per KPI.Not declaredYesNot declaredNo
search_cost_center_transactionsSearches individual bookings. Each row has period, cost_center, account, sub_account, contra_account, contra_sub_account (null if none), amount, description, transaction_date (day-exact booking date), `id` (the transaction_id for propose-transaction-correction) and `source` ("upload" or "manual"), plus correction_status ("none" | "pending" | "corrected") and correction_role (null | "reversal" | "rebooking"): whether a booking has an open or approved correction, or is itself the reversal/re-booking line of one. accounts takes "8400" (main account) or "8400/130"; each entry matches exactly that variant and unknown accounts are rejected. text_query is a case-insensitive substring of description OR reference; % and _ are searched as characters, not as wildcards. limit_count is a whole number of at least 1 (default 200, values above 1000 are capped at 1000; anything else is rejected). With truncated=true more bookings match than were returned; beyond 1000 only narrowing the filters helps. available_range gives the tenant's data range. With group_by the response carries `groups` (by period and/or cost center, each with transaction_count and transactions_truncated) instead of `rows`. Counts are reported in total_count (returned bookings), group_count (groups) and transaction_count per group; limit_count is a cap, not a count. The tool returns single bookings; sums per month, cost center or account come from compute_aggregates.Not declaredYesNot declaredNo
start-month-runStarts the Monatsreporting run (month-end close) for a month, only when that month has NO run yet (any status except failed/superseded counts, including signed-off months). Otherwise nothing is written and the existing run is returned with already_exists true, its status and a deeplink, so calling it twice is safe. It never replaces a run; restarting happens only in the app, with confirmation. The month must have booking data, otherwise NO_DATA_FOR_PERIOD is returned and no run is created. Starting normalizes the figures, collects anomaly cases and checks due watch items against them (no approval). Nothing runs in the background afterwards: AI reviews and comment drafts are created only when a person asks for them in the app. Follow-up tools: get-month-run-status, list-open-anomaly-cases.NoNoNoNo
switch_organizationSwitch the active organisation for subsequent MCP tool calls (e.g. get_periodic_summaries, query_kpis). The user must be a member and the target org must have an active subscription. The switch applies to this MCP client only, for every agent that uses it. Agents that work in parallel should not switch; they pass organization_id with each tool call instead, which runs that single call in the named organisation and leaves the active one unchanged.NoNoYesNo
update-manual-adjustmentEdits a PENDING manual correction proposal (amount, account, cost center, description, note, period). Approved bookings cannot be edited; they are deleted in the app.YesNoYesNo
upload-budget-entriesInserts or updates budget entries (monthly values) of a plan; a value that already exists for the same entry and month is overwritten. Exactly one of category, account or knw_row_number is set per entry. An account entry may name one sub-account as part of the account, e.g. "8400/130" (slash, as shown in the app); there is no separate sub_account parameter. The main account is sub-account 000: "8400" and "8400/000" mean the same and are compared against the actuals of the main account ONLY (not the sum of the sub-accounts; main-account and sub-account entries never overlap). If the account has no main account but exactly ONE sub-account, that one is used; with SEVERAL the entry is rejected (BUDGET_ACCOUNT_AMBIGUOUS, sub-accounts listed). A sub-account that does not exist for the tenant is rejected (BUDGET_ACCOUNT_UNKNOWN). An account unknown to the tenant is still accepted. Amounts are signed (expenses negative); plans created from a file upload that store expenses as positive magnitudes are rejected. For a forecast plan (type=forecast) the entries cover the ACTUAL values of the closed months plus the forecast of the remaining months (see create-budget-plan); without the closed months the year/YTD comparison is wrong. A category name that matches no P&L label is rejected with the list of valid category names and nothing is written.YesNoYesNo
withdraw-manual-adjustmentWithdraws (deletes) a PENDING manual correction proposal that has not been approved yet. Approved bookings are deleted in the app.YesNoYesNo

Details

Registry status
Active
Published
Nov 5, 2026
Updated
Nov 5, 2026
Repository
Not given
Categories (suggested)
Data and analyticsSuggested categories are assigned automatically from the registry text and may be wrong. Verified operators can correct them.
GDPR
Not declared

Are you the operator? Claim this listing