Skip to main content
Glama
easor

easor

by Markku-hur

Easor talousraportti

Yhden asiakkaan talousraportti Claude-työpöytäsovelluksessa: tuloslaskelma, tase, vertailu edelliseen vuoteen, kuukausikehitys, myyntilaskut ja seurantakohderajaus. Luvut haetaan Easorista, kun painat Hae luvut.

Raporttisivu: https://claude.ai/code/artifact/a5a605ff-fd2e-41e9-8ed9-f0fad9ad2e18

Paketissa on kaksi osaa:

  • Palvelin (tämä kansio): pieni ohjelma, joka hakee luvut Easorin rajapinnasta. Se pystyy vain lukemaan, ja se toimii vain omalla koneellasi ilman verkko-osoitetta.

  • Raporttisivu (raportti/): Claude-sivu, joka näyttää luvut.

Jokainen käyttäjä tarvitsee oman asennuksen, koska toistaiseksi vain sivun omistaja voi käyttää koneellaan ajettavaa palvelinta.

Mitä tarvitset

  • Claude-tilin ja Claude-työpöytäsovelluksen.

  • Claude Coden sivun julkaisuun.

  • Node.js:n, versio 20 tai uudempi. Windowsissa sen saa asennettua PowerShellissä komennolla winget install OpenJS.NodeJS.LTS. Avaa asennuksen jälkeen uusi PowerShell-ikkuna, koska vanhat ikkunat eivät vielä löydä node-komentoa.

  • Jokaisen raportoitavan yrityksen oman Easor-rajapinta-avaimen, joka kattaa General Ledger FI:n ja Sales Invoicing FI:n. Avaimet saa osoitteesta integration.support@easor.com. Pyydä mahdollisuuksien mukaan pelkät lukuoikeudet.

Related MCP server: Eqvitta Accounting MCP Server

1. Asenna palvelin

Pura paketti pysyvään kansioon ja aja siellä:

macOS:

npm ci
npm run build
cp .env.example .env
chmod 600 .env

Windows (PowerShell):

npm ci
npm run build
Copy-Item .env.example .env
notepad .env

Asenna paketti aina koneelle uudelleen näillä komennoilla. Älä kopioi node_modules- tai dist-kansiota toiselta koneelta, koska riippuvuuksissa on käyttöjärjestelmäkohtaisia ohjelmia.

Täytä tunnukset tiedostoon .env, yksi neljän rivin lohko yritystä kohden. Sama avain kelpaa sekä kirjanpitoon että myyntilaskuihin. Yritys tunnistetaan Easorin organisaationumerosta, jonka valitset myös raporttisivulla:

EASOR_ORG_12345_CLIENT_ID=...
EASOR_ORG_12345_CLIENT_SECRET=...
EASOR_ORG_12345_SCOPE=...
EASOR_ORG_12345_SUBSCRIPTION_KEY=...

Palvelin käyttää aina ensin haetun organisaation omaa avainta. Jos sitä ei ole tai Easor ei hyväksy sitä, palvelin käyttää organisaationumerottomia yhteisiä tunnuksia, jos niitä on. Muuten sivu kertoo, mitkä tunnukset puuttuvat. Vanha muoto, jossa on erilliset avaimet rajapinnoittain (EASOR_ORG_12345_GL_FI_* ja EASOR_ORG_12345_SALES_FI_*), toimii edelleen, ja kumpaakin kokeillaan tarvittaessa myös toiseen rajapintaan. Mallin näet tiedostosta .env.example.

.env on tavallinen tekstitiedosto, jossa on kaikkien yritysten tunnukset. Sitä ei saa lisätä versionhallintaan eikä lähettää muille. Kun lisäät yrityksen, käynnistä Claude uudelleen.

Tarkista asennus omalla organisaationumerollasi:

EASOR_TEST_ORG=<organisaationumero> npm test

Windows (PowerShell):

$env:EASOR_TEST_ORG="<organisaationumero>"; npm test

Ilman organisaationumeroa testit tarkistavat vain palvelimen rakenteen, eivätkä ne kutsu Easoria.

2. Liitä palvelin Claude-työpöytäsovellukseen

Helpoin tapa: komento

Aja paketin kansiossa (macOS ja Windows):

npm run setup:claude

Komento lisää palvelimen nimellä easor Claude-työpöytäsovelluksen asetuksiin ja, jos claude-komento on asennettu, myös Claude Codeen (kohta 3). Se etsii asetustiedoston itse, säilyttää muut asetukset ja tekee alkuperäisestä varmuuskopion claude_desktop_config.json.bak-easor. Jos siirrät paketin kansion myöhemmin toiseen paikkaan, aja komento uudelleen.

Lopeta sen jälkeen sovellus kokonaan ja avaa se uudelleen. Windowsissa ikkunan sulkeminen ei riitä: lopeta sovellus ilmaisinalueen kuvakkeesta (Quit).

Käsin

Avaa sovelluksen asetuksista Developer ja Edit Config, tai avaa tiedosto suoraan:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: sijainti riippuu sovelluksen versiosta ja asennustavasta, joten avaa tiedosto mieluiten sovelluksen kautta. Mahdolliset paikat:

    • %LOCALAPPDATA%\Claude-Data\claude_<tunniste>\claude_desktop_config.json (uudet versiot)

    • %LOCALAPPDATA%\Packages\Claude_<tunniste>\LocalCache\Roaming\Claude\claude_desktop_config.json (Microsoft Store)

    • %APPDATA%\Claude\claude_desktop_config.json (vanhat versiot)

    Tiedoston löytää PowerShellissä komennolla:

    Get-ChildItem $env:LOCALAPPDATA, $env:APPDATA -Recurse -Depth 5 -Filter claude_desktop_config.json -ErrorAction SilentlyContinue | Select-Object -Expand FullName

Lisää palvelin mcpServers-kohtaan ja käytä kokonaisia polkuja. Noden polun näet komennolla which node (Windowsissa where node).

macOS:

{
  "mcpServers": {
    "easor": {
      "command": "/polku/node",
      "args": ["/polku/easor-raportti/dist/index.js"]
    }
  }
}

Windows: kirjoita jokainen kenoviiva tuplana, tai käytä kauttaviivoja (C:/easor-raportti/dist/index.js).

{
  "mcpServers": {
    "easor": {
      "command": "C:\\Program Files\\nodejs\\node.exe",
      "args": ["C:\\easor-raportti\\dist\\index.js"]
    }
  }
}

Esimerkki, kun paketti on purettu Tiedostot-kansioon (<käyttäjä> on Windows-käyttäjänimesi). Jos asetustiedostossa on jo muita palvelimia, lisää easor niiden rinnalle samaan mcpServers-kohtaan pilkulla erotettuna:

{
  "mcpServers": {
    "easor": {
      "command": "C:\\Program Files\\nodejs\\node.exe",
      "args": ["C:\\Users\\<käyttäjä>\\Documents\\easor-raportti\\dist\\index.js"]
    }
  }
}

Saat dist\index.js-tiedoston koko polun ajamalla paketin kansiossa PowerShellissä:

(Resolve-Path .\dist\index.js).Path

Palvelimen nimen pitää olla täsmälleen easor, koska raporttisivu kutsuu sitä tällä nimellä. Sulje sovellus kokonaan ja avaa se uudelleen. Windowsissa ikkunan sulkeminen ei riitä: lopeta sovellus ilmaisinalueen kuvakkeesta (Quit).

3. Julkaise raporttisivu omalle tilillesi

Julkaise sivu paikallisesta Claude Code -sessiosta, johon palvelin on kytketty, koska pilvessä toimiva keskustelu ei voi antaa sivulle oikeutta paikalliseen palvelimeen.

Jos ajoit kohdassa 2 komennon npm run setup:claude ja claude oli jo asennettu, palvelin on jo lisätty Claude Codeen. Siirry suoraan claude-komentoon. Muuten lisää se käsin:

claude mcp add easor -- /polku/node /polku/easor-raportti/dist/index.js
claude

Windows (PowerShell):

claude mcp add easor -- "C:\Program Files\nodejs\node.exe" "C:\easor-raportti\dist\index.js"
claude

PowerShellissä polut kirjoitetaan lainausmerkkeihin yksinkertaisilla kenoviivoilla, ei tuplana kuten JSONissa. Voit tarkistaa ennen claude-komentoa, että palvelin käynnistyy: claude mcp list näyttää kohdan easor tilana Connected.

Pyydä sessiossa:

Julkaise raportti/easor-talousraportti.html Artifactina. Anna sille tiedoston raportti/capabilities.json mukaiset capabilities. Älä muuta sivun sisältöä.

Sivu on oletuksena yksityinen.

4. Hae ensimmäinen raportti

  1. Avaa sivu Claude-työpöytäsovelluksessa, ei selaimessa.

  2. Valitse organisaatio ja kuukausi, johon kausi päättyy. Organisaationumeron kenttä ehdottaa yrityksiä, joille .env-tiedostossa on omat tunnukset, nimen ja Y-tunnuksen kanssa. Jos tunnuksia on vain yhdelle yritykselle, se valitaan valmiiksi. Muun numeron voi kirjoittaa itse, esimerkiksi jos yhteiset tunnukset kattavat yrityksen.

  3. Paina Hae luvut.

Ensimmäinen haku kestää noin minuutin, koska Claude rajoittaa sivun kutsuja. Sama haku 5 minuutin sisällä näyttää jo haetut luvut, ja kohta Haettu kertoo, milloin ne on haettu.

Päivitys vanhasta versiosta

  1. Lopeta Claude-sovellus (Windowsissa ilmaisinalueen kuvakkeesta: Quit).

  2. Pura uusi paketti vanhan kansion päälle tai uuteen kansioon. Säilytä vanha .env, ja kopioi se uuteen kansioon, jos vaihdoit kansiota. Vanha .env toimii sellaisenaan, myös vanhassa muodossa, jossa avaimet on nimetty rajapinnoittain.

  3. Aja paketin kansiossa npm ci, npm run build ja npm run setup:claude.

  4. Avaa Claude uudelleen.

  5. Julkaise raporttisivu uudelleen kohdan 3 mukaisesti, koska uusi sivu käyttää yhtä työkalua enemmän (organisaatiolista). Vanha sivu toimii edelleen, mutta ilman uusia ominaisuuksia.

Työkalut

Työkalu

Kuvaus

list_configured_organizations

Luettelee .env-tiedostossa tunnukset saaneet organisaatiot.

get_organisation_info

Palauttaa organisaation perustiedot (nimi, Y-tunnus).

get_accounting_periods

Palauttaa organisaation tilikaudet.

build_profit_and_loss_statement

Rakentaa tuloslaskelman annetulle kaudelle.

build_balance_sheet

Rakentaa taseen annetulle päivämäärälle.

get_used_chart_of_accounts

Palauttaa kaudella käytetyt kirjanpitotilit.

get_general_ledger_events

Palauttaa sivutetun listan kirjanpidon vientiriveistä.

get_dimension_settings

Palauttaa seurantakohteiden asetukset.

get_dimension_values

Palauttaa seurantakohteen arvot.

lookup_chart_of_accounts_template

Hakee tilikarttamallin Easorin kirjastosta.

sales_get_invoice

Hakee myyntilaskuja ja yhteenvetotietoja.

get_voucher_image

Palauttaa tositteen PDF-kuvan base64-koodattuna MCP-resurssina. voucherId voi tulla mistä tahansa Easorin vastauksesta, jossa tositteen tunniste esiintyy (esim. kirjanpidon vientiriveiltä). Muistiotositteilla ei ole kuvaa.

Rajoitukset

  • Raportti toimii vain työpöytäsovelluksessa koneella, jossa palvelin on asennettu.

  • Kesken tilikauden taseen omaan pääomaan lasketaan kuluvan tilikauden tulos riville Tilikauden voitto (tappio) tuloslaskelmatilien saldoista, joten tase täsmää ennen tilinpäätöstäkin. Jos tase silti ei täsmää, sivu näyttää eron ja varoittaa siitä.

  • Taseesta voivat puuttua tilit, joille on viimeksi kirjattu ennen vuotta 2022. Tästä sivu ei voi varoittaa.

  • Seurantakohderajaus koskee vain tuloslaskelmaa, ei tasetta eikä myyntilaskuja. Se hakee enintään 20 000 vientiä kaudelta ja varoittaa, jos raja ylittyy.

  • "Laskut yhteensä" sisältää myös luonnokset, eikä laskutettu summa ole sama kuin kirjanpidon liikevaihto.

  • Tarkista luvut Easorin omasta raportista, ennen kuin käytät niitä päätöksenteossa.

Vianetsintä

Mitä näkyy

Mitä tehdä

"Easor ei ole tavoitettavissa"

Avaa sivu työpöytäsovelluksessa. Tarkista, että palvelimen nimi on easor ja dist/index.js on olemassa.

"Organisaatiolle ... ei ole Easor-tunnuksia"

Lisää yrityksen tunnukset tiedostoon .env ja käynnistä sovellus uudelleen.

"Missing required environment variable"

Yrityksen tunnuksista puuttuu jokin arvo. Vertaa niitä tiedostoon .env.example.

Haku palauttaa 401 tai 403

Yrityksen tunnukset ovat väärät tai eivät kata organisaatiota. Tarkista organisaationumero ja ota tarvittaessa yhteys integraatiotukeen.

npm ci tai npm run build epäonnistuu

Tarkista Noden versio komennolla node --version (vähintään 20). Poista node_modules ja dist, jos ne on kopioitu toiselta koneelta, ja aja komennot uudelleen.

Palvelin ei näy sovelluksen asetuksissa (Windows)

Tarkista, että asetustiedosto on oikeassa kansiossa ja kelvollista JSONia: kenoviivat tuplana. Lopeta sovellus ilmaisinalueelta ja avaa se uudelleen.

Palvelimen loki on tiedostossa:

  • macOS: ~/Library/Logs/Claude/mcp-server-easor.log

  • Windows: %LOCALAPPDATA%\Claude\logs\mcp-server-easor.log (vanhoissa versioissa %APPDATA%\Claude\logs\)

Lokissa näkyvät vain kutsujen osoitteet, tilat ja kestot, ei lukuja.

Available Tools

12 tools
build_balance_sheetBuild tase (balance sheet) as of a dateA
Read-only

Builds a fully-computed Tase as of the given date — VASTAAVAA (assets) and VASTATTAVAA (equity + liabilities), every official line with real activity (lines with no activity at all are omitted) and real euro figures, cumulative since inception (no period math needed for a balance-sheet account). Both sides are shown as positive figures (conventional presentation sign, NOT raw ledger signs) — a balanced Tase means EQUAL totals on both sides. The fiscal year's not-yet-closed result is included in OMA PÄÄOMA under Tilikauden voitto (tappio) and also returned as currentPeriodResult, so a mid-year Tase balances too. Use this instead of assembling a report by hand from lookup_chart_of_accounts_template — it always produces the same structure. balanceMismatch is non-null if the two sides don't match (a Tase must balance) — surface that to whoever asked rather than reporting an unbalanced tase as if it were fine. Any account the organization uses that isn't recognized by the bundled template is listed separately in unclassifiedAccounts (raw ledger sign there, not the presentation sign above), never silently folded into a line.

Inputs: asOfDate (required), organizationNumber (required).

build_profit_and_loss_statementBuild tuloslaskelma (income statement) for a periodA
Read-only

Builds a fully-computed Tuloslaskelma for the given period — every official line with real activity (Kirjanpitoasetus Liite 1 kululajikohtainen-tuloslaskelma order; lines with no activity at all are omitted — subtotals like LIIKEVOITTO are always kept, even at 0), with real euro figures already in conventional presentation sign (revenue positive, costs negative, profit positive when profitable — NOT raw ledger signs). Use this instead of assembling a report by hand from lookup_chart_of_accounts_template — it always produces the same structure. fromDate and toDate must fall within the same accounting period (fiscal year) — this refuses otherwise rather than silently computing a wrong number. Any account the organization uses that isn't recognized by the bundled template is listed separately in unclassifiedAccounts (raw ledger sign there, not the presentation sign above), never silently folded into a line — check those before reporting a total.

Inputs: toDate (required), fromDate (required), organizationNumber (required).

get_accounting_periodsGet accounting periodsB
Read-only

Returns a customer's accounting periods (each with nested bookkeeping periods) from Easor's Organization API. Global — no region-specific path.

Inputs: organizationNumber (required), locked, pageSize, pageIndex, +2 more.

get_dimension_settingsGet dimension settingsB
Read-only

Returns the organization's enabled dimension types (CostCenter/CostType/Project/ProjectType).

Inputs: organizationNumber (required), acceptLanguage.

get_dimension_valuesGet dimension valuesC
Read-only

Returns dimension values (e.g. specific cost centers/projects), paged and optionally filtered.

Inputs: pageSize (required), pageIndex (required), organizationNumber (required), code, +3 more.

get_general_ledger_eventsGet general ledger eventsB
Read-only

Returns a page of general ledger events (individual postings), optionally filtered. When summing postings for a total, use (credit ?? debet ?? 0) per posting — NEVER credit - debet or debet - credit. credit and debet are mutually exclusive per posting and already correctly signed (credit negative, debet positive); subtracting one from the other double-applies the sign. This matters most when an account has both kinds of posting in the period (e.g. a sale immediately reversed same-day) — an account with only one kind can look reconciled even with a wrong formula.

Inputs: pageSize (required), pageIndex (required), organizationNumber (required), toDate, +4 more.

get_organisation_infoGet organisation infoB
Read-only

Returns organisation info (address, business id, VAT id/period/obligations, invoicing details, ...) from Easor's Organization API.

Inputs: organizationNumber (required).

get_used_chart_of_accountsGet used chart of accountsC
Read-only

Returns the bookkeeping accounts used within a date range.

Inputs: toDate (required), fromDate (required), organizationNumber (required).

get_voucher_imageGet voucher imageA
Read-only

Returns the PDF image of a voucher from Easor. The voucherId can be obtained from any Easor response that includes a voucher identifier (for example the voucherId field on general ledger event rows). Memorial vouchers (muistioviennit) never have an image. The organizationNumber must match the organization the voucher belongs to. Set openFile=false to receive only the base64 PDF data without saving to disk or opening a viewer (intended for embedded display in a web page; default true opens the PDF in the system viewer).

Inputs: voucherId (required), organizationNumber (required), openFile.

list_configured_organizationsList organizations with credentialsA
Read-only

Lists the organizations that have credentials of their own in this server's .env (from the variable names only, never their values), with the organization's name and business id from Easor when available. sharedApis names the APIs (GL_FI, SALES_FI) that also have shared credentials: those can cover organizations not in the list, which then have to be entered by number.

Inputs: no named parameters.

lookup_chart_of_accounts_templateLook up Easor's generic chart-of-accounts templateA
Read-only

Looks up Easor's generic (organization-independent) Finnish chart-of-accounts template — a static reference bundled with this server, not a live API call. Use it to find which account numbers/groups are structurally relevant to a question (e.g. fixed vs. variable costs, which mainCategory alone cannot distinguish), NOT as a source of actual balances — always confirm real figures against the organization's own live data (get_used_chart_of_accounts / get_general_ledger_events / build_profit_and_loss_statement) since an organization's real chart can differ from this template. Pass listGroups:true alone to explore the group hierarchy first; otherwise filter by accountNumber (exact), accountNumberPrefix, nameContains, and/or groupContains (matches any segment of the account's group path, e.g. "MUUTTUVA" for variable-cost groups, "KIINTEÄ" for fixed-cost groups) — at least one filter is required. When presenting a grouped report — balance sheet (tase) or income statement (tuloslaskelma) alike, or anything else grouped by account — use groupPath's own names VERBATIM as section headings/structure — do not paraphrase, translate, or invent your own category labels.

Inputs: limit, listGroups, nameContains, accountNumber, +2 more.

sales_get_invoiceSearch or get invoiceC
Read-only

Search or get invoice — GET /v1/{organizationNumber}/invoices [PublicGetInvoiceFIV1].

Inputs: organizationNumber (required), limit, offset, dateEnd, +8 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.5/5.0

    Scored across 12 tools

    Disambiguation4/5

    Most tools target a distinct resource (invoices, periods, org info, ledger events, vouchers, dimensions) and the two reporting builders are clearly separated by statement type. The main fuzzy pair is get_used_chart_of_accounts vs lookup_chart_of_accounts_template, which the descriptions do disambiguate (live data vs static template), plus the verbose descriptions carry a lot of the distinguishing weight. Overall boundaries are clear enough that misselection is unlikely.

    Naming Consistency4/5

    Nearly all names follow snake_case verb_noun (get_*, list_*, build_*, lookup_*), which is predictable and readable. Deviations are minor: 'sales_get_invoice' puts the domain first instead of the verb, and 'organisation' (British) coexists with 'organization' in list_configured_organizations.

    Tool Count5/5

    12 tools is squarely in the well-scoped range, and each one covers a distinct slice of the accounting/reporting domain (reference data, live ledger data, and two computed statements). Nothing looks redundant or padding-like.

    Completeness4/5

    For a read-only Finnish bookkeeping/reporting surface, coverage is strong: org info, periods, chart of accounts, ledger events, voucher images, dimensions, and computed Tase/Tuloslaskelma. Gaps exist around write operations (no invoice or voucher creation, no updates) and there is no direct voucher listing/search, only image retrieval by id.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      B
      maintenance
      Enables AI assistants to query and manage self-hosted accounting data—invoices, balances, and books—through natural language, with read-only tools by default and optional scoped write operations.
      30
      24 PyPI
      1
      AGPL 3.0
    • A
      license
      A
      quality
      B
      maintenance
      Connects Claude Desktop, Claude Code, and other MCP-compatible clients to cloud accounting and GST billing records, enabling GST-compliant invoice creation, ledger and voucher management, balance queries, and real-time financial reporting through natural language with role-based tenant isolation.
      22
      38 npm
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables AI agents to query a connected accounting platform for organisations, invoices, contacts, chart of accounts, and profit-and-loss reports, supporting bookkeeping, AR/AP, and financial reporting workflows.
      299 npm
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables Claude Desktop users to query recorded business finances—such as revenue, costs, estimated contribution profit, and cash runway—from a paired local Mac app, with in-app approval required for financial reads and separate confirmation before any proposed records are saved.
      MIT