easor
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@easor show me this year's profit and loss statement compared to last year"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 .envWindows (PowerShell):
npm ci
npm run build
Copy-Item .env.example .env
notepad .envAsenna 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 testWindows (PowerShell):
$env:EASOR_TEST_ORG="<organisaationumero>"; npm testIlman 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:claudeKomento 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.jsonWindows: 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).PathPalvelimen 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
claudeWindows (PowerShell):
claude mcp add easor -- "C:\Program Files\nodejs\node.exe" "C:\easor-raportti\dist\index.js"
claudePowerShellissä 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.htmlArtifactina. Anna sille tiedostonraportti/capabilities.jsonmukaiset capabilities. Älä muuta sivun sisältöä.
Sivu on oletuksena yksityinen.
4. Hae ensimmäinen raportti
Avaa sivu Claude-työpöytäsovelluksessa, ei selaimessa.
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.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
Lopeta Claude-sovellus (Windowsissa ilmaisinalueen kuvakkeesta: Quit).
Pura uusi paketti vanhan kansion päälle tai uuteen kansioon. Säilytä vanha
.env, ja kopioi se uuteen kansioon, jos vaihdoit kansiota. Vanha.envtoimii sellaisenaan, myös vanhassa muodossa, jossa avaimet on nimetty rajapinnoittain.Aja paketin kansiossa
npm ci,npm run buildjanpm run setup:claude.Avaa Claude uudelleen.
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 |
| Luettelee .env-tiedostossa tunnukset saaneet organisaatiot. |
| Palauttaa organisaation perustiedot (nimi, Y-tunnus). |
| Palauttaa organisaation tilikaudet. |
| Rakentaa tuloslaskelman annetulle kaudelle. |
| Rakentaa taseen annetulle päivämäärälle. |
| Palauttaa kaudella käytetyt kirjanpitotilit. |
| Palauttaa sivutetun listan kirjanpidon vientiriveistä. |
| Palauttaa seurantakohteiden asetukset. |
| Palauttaa seurantakohteen arvot. |
| Hakee tilikarttamallin Easorin kirjastosta. |
| Hakee myyntilaskuja ja yhteenvetotietoja. |
| Palauttaa tositteen PDF-kuvan base64-koodattuna MCP-resurssina. |
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 |
"Organisaatiolle ... ei ole Easor-tunnuksia" | Lisää yrityksen tunnukset tiedostoon |
"Missing required environment variable" | Yrityksen tunnuksista puuttuu jokin arvo. Vertaa niitä tiedostoon |
Haku palauttaa 401 tai 403 | Yrityksen tunnukset ovat väärät tai eivät kata organisaatiota. Tarkista organisaationumero ja ota tarvittaessa yhteys integraatiotukeen. |
| Tarkista Noden versio komennolla |
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.logWindows:
%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 toolsbuild_balance_sheetBuild tase (balance sheet) as of a dateARead-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 periodARead-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 periodsBRead-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 settingsBRead-only
Returns the organization's enabled dimension types (CostCenter/CostType/Project/ProjectType).
Inputs: organizationNumber (required), acceptLanguage.
get_dimension_valuesGet dimension valuesCRead-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 eventsBRead-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 infoBRead-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 accountsCRead-only
Returns the bookkeeping accounts used within a date range.
Inputs: toDate (required), fromDate (required), organizationNumber (required).
get_voucher_imageGet voucher imageARead-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 credentialsARead-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 templateARead-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 invoiceCRead-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
Scored across 12 tools
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.
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.
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.
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
Related MCP Connectors
Connect Claude or Cursor to books, invoices, bills, payroll, and sealed closes.
Connect QuickBooks to ChatGPT, Claude & Grok. Record bills, invoices, journal entries. Run reports.
Connect Claude to Dutch accounting software: e-Boekhouden invoices, contacts and ledgers.
Query your books, company data, business health, and ship invoices from your AI assistant.
Related MCP Servers
- AlicenseBqualityBmaintenanceEnables 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.3024 PyPI1AGPL 3.0
- AlicenseAqualityBmaintenanceConnects 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.2238 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables 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 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables 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