Skip to main content
Glama
datakytkin

suomi-mcp

by datakytkin

suomi-mcp

npm CI license

English summary below ↓

Osa datakytkin-projektia. Kokoelma MCP-työkaluja, jotka tuovat suomalaista avointa dataa suoraan tekoälyavustajien käyttöön – ilman selaimessa kikkailua, PDF-latauksia tai leikepöytää.

Paikallisesti ajettava MCP-palvelin (stdio), joka tuo Claude Desktopin (tai muun MCP-yhteensopivan clientin) käyttöön 11 työkalua suomalaisiin avoimen datan rajapintoihin:

datakytkin-mcp demo: Claude hakee Hilmasta tarjouspyynnöt ja tarkistaa hankintayksiköiden kaupparekisteritiedot PRH:sta

Työkalu

Lähde

Mitä tekee

hae_yritystiedot_prh

PRH / YTJ avoin data (avoindata.prh.fi/opendata-ytj-api/v3)

Yrityksen perustiedot Y-tunnuksella tai nimellä: nimi, Y-tunnus, yritysmuoto, toimiala (TOL), kotipaikka, verkkosivu, rekisteröintipäivä, toiminnan tila, rekisterimerkinnät (ALV-, ennakkoperintä-, työnantajarekisteri).

hae_julkiset_hankinnat_hilma

Hilma – julkiset hankinnat (hankintailmoitukset.fi)

Hakee avoinna olevat hankintailmoitukset hakusanalla: otsikko, hankintayksikkö, määräaika, suorat linkit ilmoitukseen ja tarjouspyyntöön.

hae_hankintailmoitus

Hilma – julkiset hankinnat

Yhden hankinnan kaikki tiedot: koko kuvaus, arvioitu arvo, menettely, CPV-koodit, osat, vastuullisuuskriteerit, TED-numero, linkit.

hae_kaupparekisteri_muutokset_prh

PRH – rekisteröidyt ilmoitukset (avoindata.prh.fi/opendata-registerednotices-api/v3)

Yrityksen perustiedot + aikajana kaupparekisteriin rekisteröidyistä ilmoituksista: hallitus- ja nimenmuutokset, tilinpäätökset, osakepääoma, konkurssi/saneeraus/selvitystila. Täysi kattavuus.

tarkista_alv_tunnus

EU VIES

Tarkistaa EU-ALV-tunnuksen voimassaolon + palauttaa nimen ja osoitteen. Käytä ennen ALV 0 % -laskutusta EU-maahan.

hae_porssisahko

porssisahko.net avoin API

Suomen pörssisähkön (spot) tuntihinnat: hinta nyt, seuraavat tunnit, vuorokauden halvin ja kallein tunti. c/kWh sis. ALV 25,5 %.

hae_saa

Ilmatieteen laitos, avoin data (WFS)

Sääennuste tunneittain paikkakunnalle: lämpötila, tuuli, sade, ilmankosteus.

laske_inflaatio

Tilastokeskus StatFin (elinkustannusindeksi)

Rahan ostovoiman muutos vuosien välillä, yhtenäinen sarja vuodesta 1951. "Paljonko 1000 € vuonna 1985 on nyt."

hae_asuntojen_hinnat

Tilastokeskus StatFin (ashi/13mu)

Vanhojen osakeasuntojen neliöhinnat ja kauppamäärät postinumeroalueittain, talotyypeittäin.

hae_polttoaineen_hinnat

Tilastokeskus StatFin (khi/11xx)

Bensiini (95/98), diesel ja kevyt polttoöljy: keskihinta viimeisimmältä tilastokuukaudelta + muutos ed. kuukauteen ja vuoden takaiseen.

tarkista_iban

– (ei rajapintaa)

IBAN-tilinumeron rakenne + tarkistusnumero (mod-97). Suomalaiselle IBANille kansallinen tilinumero ja arvio pankista.

PRH: vanha avoindata.prh.fi/bis/v1 on poistettu käytöstä. Tämä palvelin käyttää nykyistä v3-rajapintaa (sama avoin YTJ-yrityshaku, ei API-avainta).

Hilma: käytetään Hilman julkista hakurajapintaa, joka ei vaadi avainta. Koko ilmoituksen eForms-XML:n saa erikseen AVP-read-rajapinnasta (ilmainen tilausavain) – sitä ei tässä tarvita.

Pikakäyttö

Vaatii Node.js 18+ polussa (kehitetty ja testattu Node 20:llä).

Lisää Claude Desktopin konfiguraatioon:

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

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "datakytkin": {
      "command": "npx",
      "args": ["-y", "datakytkin-mcp"]
    }
  }
}

Käynnistä Claude Desktop uudelleen. Ei tarvita erillistä asennusta – npx hakee paketin npm:stä.

Jos näet virheen fetch is not defined

Claude Desktop käynnistää palvelimen omalla PATH:llaan, ja npx valitsee #!/usr/bin/env node -rivin kautta ensimmäisen node:n PATH:ssa – usein vanhan järjestelmä-Noden (esim. v16), josta puuttuu fetch. Vaihda tällöin suoraan absoluuttiseen Node 18+ -binääriin ja globaaliin asennukseen:

# asenna halutulla Nodella (esim. nvm:n Node 20)
"$(nvm which 20)" "$(dirname "$(nvm which 20)")/npm" install -g datakytkin-mcp
# tulosta polut configia varten:
echo "command: $(nvm which 20)"
echo "entry:   $("$(nvm which 20)" "$(dirname "$(nvm which 20)")/npm" root -g)/datakytkin-mcp/dist/index.js"
{
  "mcpServers": {
    "datakytkin": {
      "command": "/ABSOLUUTTINEN/POLKU/node/v20.x.x/bin/node",
      "args": ["/ABSOLUUTTINEN/POLKU/node/v20.x.x/lib/node_modules/datakytkin-mcp/dist/index.js"]
    }
  }
}

node ajetaan tässä eksplisiittisesti, joten PATH:n vanha Node ei häiritse. Päivitys: npm install -g datakytkin-mcp@latest samalla Nodella.

Related MCP server: finnish-company-mcp-server

Testikehotteet

  1. "Hae PRH:sta yrityksen tiedot Y-tunnuksella 1629284-5."

  2. "Etsi Hilmasta avoimet pilvipalveluihin liittyvät hankintailmoitukset, näytä 5."

  3. "Hae YTJ:stä kaikki yritykset joiden nimessä on 'Reaktor' ja listaa Y-tunnukset."

  4. "Näytä Hilmasta it-konsultoinnin tarjouspyynnöt ja niiden määräajat."

  5. "Listaa Y-tunnuksen 1629284-5 viimeisimmät kaupparekisteriin rekisteröidyt muutokset."

  6. "Onko yrityksellä 1234567-8 merkintöjä konkurssista tai saneerauksesta? Milloin hallitus on viimeksi muuttunut?"

  7. "Mikä on pörssisähkön hinta nyt ja milloin tänään on halvinta?"

  8. "Onko ALV-tunnus DE811128135 voimassa ja kenelle se kuuluu?"

  9. "Millainen sää Rovaniemellä on seuraavat 12 tuntia?"

  10. "Paljonko 500 markkaa vuonna 1990 on nykyrahassa?"

  11. "Näytä kaikki tiedot Hilman tietoturvakonsultoinnin dynaamisesta hankintajärjestelmästä."

  12. "Mitä maksaa neliö postinumerossa 33720?"

  13. "Paljonko diesel maksaa nyt ja miten hinta on muuttunut vuodessa?"

  14. "Onko IBAN FI21 1234 5600 0007 85 muodoltaan oikein ja minkä pankin tili?"

Kehitys

git clone https://github.com/datakytkin/suomi-mcp.git
cd suomi-mcp
nvm use 20        # tai: nvm install 20
npm install
npm run typecheck # tarkista että kääntyy
npm test          # vitest: työkalut (mockattu fetch), rekisteri, auth, mcp-server
npm run dev       # käynnistä palvelin stdio-tilassa (= npx tsx src/index.ts)

Palvelin puhuu MCP:tä stdin/stdout-yhteydellä; lokit menevät stderriin.

Käännetty ajo:

npm run build     # tuottaa dist/
npm start         # = node dist/index.js

Uuden työkalun lisääminen: ks. CONTRIBUTING.md. Käytännössä: luo src/tools/<lahde>.ts, vie siitä export const tool: ToolDefinition, valmista – src/tools/registry.ts löytää sen automaattisesti sekä stdio-palvelimeen että Gatewayhin.

Claude Desktop -konfiguraatio repo-checkoutista (kehitykseen / omiin muutoksiin):

{
  "mcpServers": {
    "datakytkin": {
      "command": "npx",
      "args": ["tsx", "/ABSOLUUTTINEN/POLKU/suomi-mcp/src/index.ts"]
    }
  }
}

Datasilta-Gateway (kokeellinen)

Sama työkalusetti tarjottuna keskitettynä HTTP-palvelimena, jotta asiakkaan ei tarvitse asentaa mitään paikallisesti – hän liittää yhden URL:n + tokenin suoraan Claude Desktopiin tai Grokin Custom Connectors -kenttään.

Gateway (src/gateway.ts, src/auth.ts) elää tässä samassa repossa (Open Core): koodi on MIT, kaupallinen arvo on hostatussa palvelussa + data-integraatioissa, ei transporttikoodissa. Jos/kun mukaan tulee laskutusta tai asiakastietoa, ne eriytetään omaksi (privaatiksi) osakseen.

npm install
DATASILTA_DEV_ALLOW_ANY=1 PORT=3000 npm run dev:gateway

Päätepisteet:

Reitti

Kuvaus

GET /sse?token=demo

HTTP+SSE-kuljetus (laajin connector-tuki). Client postaa viestit POST /messages?sessionId=….

POST /mcp

Streamable HTTP -kuljetus (spec-nykyinen). Token joko Authorization: Bearer … tai ?token=…. Stateless.

GET /healthz

Tila + työkalulista

GET /

Lyhyt käyttöohje

Mock-tokenit: demo (pro), 123 (free), enterprise. Kehityksessä DATASILTA_DEV_ALLOW_ANY=1 hyväksyy minkä tahansa ≥3 merkin tokenin.

Kovennukset: plan-kohtainen rate limit (free 20 / pro 120 / enterprise 600 kutsua/min, RateLimit-* + Retry-After -otsakkeet), rinnakkaisten SSE-sessioiden katto per asiakas, X-Request-Id + pyyntöloki, graceful shutdown (SIGTERM/SIGINT sulkee SSE-sessiot siististi – tärkeä konttiympäristöissä).

Julkinen testaus ngrokilla:

ngrok http 3000
# -> https://xxxx.ngrok-free.app/sse?token=demo  Grokiin / Claudeen

Kokeellinen. CORS on täysin auki ja auth on mock. Älä aja tätä julkisesti ilman oikeaa tokenvalidointia ja CORS-rajausta. ?token= URL:ssa vuotaa lokeihin – tuotannossa Authorization: Bearer.

Ei virallinen tuote

datakytkin on itsenäinen avoimen lähdekoodin projekti. Se käyttää PRH:n ja Hilman julkisia rajapintoja, mutta ei ole PRH:n, Hanselin, Hilman tai minkään viranomaisen hyväksymä, tukema tai ylläpitämä. Data tulee sellaisenaan lähteestä.


English

suomi-mcp is part of the datakytkin project: a set of Model Context Protocol tools that bring Finnish open government data straight into AI assistants – no browser tabs, PDF downloads or copy-paste.

A locally run MCP server (stdio) exposing 11 tools to Claude Desktop (or any MCP-compatible client):

Tool

Source

What it does

hae_yritystiedot_prh

Finnish Patent and Registration Office (PRH) / Business Information System, open data v3

Company details by Business ID or name: name, Business ID, company form, industry (TOL), domicile, website, registration date, status, and register entries (VAT / prepayment / employer register).

hae_julkiset_hankinnat_hilma

Hilma – Finnish public procurement notices (hankintailmoitukset.fi)

Search open procurement notices by keyword: title, contracting entity, deadline, direct links to the notice and tender documents.

hae_hankintailmoitus

Hilma – Finnish public procurement notices

All details of a single procurement: full description, estimated value, procedure, CPV codes, lots, sustainability criteria, TED number, links.

hae_kaupparekisteri_muutokset_prh

PRH – registered notices open data

Company basics + a timeline of entries registered in the Finnish Trade Register: board and name changes, financial statements, share capital, bankruptcy / restructuring / liquidation. Full coverage.

tarkista_alv_tunnus

EU VIES

Validates an EU VAT number and returns the registered name and address. Use before zero-rated intra-EU invoicing.

hae_porssisahko

porssisahko.net open API

Finnish day-ahead electricity spot prices by hour: price now, upcoming hours, cheapest and most expensive hour of the day. c/kWh incl. 25.5% VAT.

hae_saa

Finnish Meteorological Institute open data (WFS)

Hourly weather forecast for a place: temperature, wind, precipitation, humidity.

laske_inflaatio

Statistics Finland StatFin (cost-of-living index)

Purchasing power of a sum between two years, continuous series since 1951.

hae_asuntojen_hinnat

Statistics Finland StatFin (ashi/13mu)

Resale flat €/m² and transaction counts by postal-code area, by dwelling type.

hae_polttoaineen_hinnat

Statistics Finland StatFin (khi/11xx)

Petrol (95/98), diesel and light fuel oil: latest monthly average price + change vs previous month and year.

tarkista_iban

– (no API)

IBAN structure + check digits (mod-97), offline. For Finnish IBANs also the national account number and a bank guess.

Tool names and all output are in Finnish (that is the data's language).

Install

Requires Node.js 18+. Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS, %APPDATA%\Claude\claude_desktop_config.json on Windows):

{
  "mcpServers": {
    "datakytkin": {
      "command": "npx",
      "args": ["-y", "datakytkin-mcp"]
    }
  }
}

Restart Claude Desktop.

Seeing fetch is not defined? Claude Desktop launches the server with its own PATH, and npx may pick an old system node (e.g. v16) that lacks fetch. Install globally with a Node 18+ binary and point command straight at it:

npm install -g datakytkin-mcp
npm root -g   # entry = <printed path>/datakytkin-mcp/dist/index.js
{
  "mcpServers": {
    "datakytkin": {
      "command": "/absolute/path/to/node18+/bin/node",
      "args": ["/absolute/path/to/lib/node_modules/datakytkin-mcp/dist/index.js"]
    }
  }
}

Not an official product

datakytkin is an independent open-source project. It consumes public APIs from PRH and Hilma but is not endorsed, supported or operated by PRH, Hansel, Hilma or any public authority. Data is served as-is from the source. See SECURITY.md for notes on the data sources and responsible use.

Lisenssi / License

MIT

Available Tools

11 tools
hae_asuntojen_hinnatHae asuntojen neliöhinnat (postinumero)A
Read-onlyIdempotent

Hakee vanhojen osakeasuntojen neliöhinnat ja kauppojen lukumäärän postinumeroalueella Tilastokeskuksen tilastosta, talotyypeittäin (yksiöt / kaksiot / kolmiot+ / rivitalot). Anna postinumero ja halutessasi vuosi.

ParametersJSON Schema
NameRequiredDescriptionDefault
vuosiNoTilastovuosi. Oletus: viimeisin saatavilla.
postinumeroYes5-numeroinen postinumero, esim. 00100.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, and open-world behavior. The description adds useful context beyond that: the data source (Tilastokeskus), the specific returned information (prices and transaction counts), and the grouping by dwelling type. It does not describe error behavior or availability, but this is not critical given the annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler: the first states exactly what is fetched and how it is organized, and the second tells the agent what to supply. The main content is front-loaded and every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read-only lookup with full schema coverage, the description is sufficiently complete: it states the input requirement, the optional year, the output fields, and the output grouping. The lack of a formal output schema is mitigated because the description already explains what data to expect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with both parameters already documented including the postal code pattern and the year minimum/default. The description only echoes 'Anna postinumero ja halutessasi vuosi' and adds no format or constraint details beyond the schema, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Hakee') with a clear resource: old share-apartment square-meter prices and transaction counts by postal code from Statistics Finland. It also states the output breakdown by dwelling type, which clearly separates it from sibling tools like hae_polttoaineen_hinnat or hae_porssisahko.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: when Finnish apartment square-meter prices per postal code area are needed from Statistics Finland. It does not explicitly name alternatives or exclusions, but the sibling tools are sufficiently unrelated that the usage context is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hae_hankintailmoitusHae yhden hankinnan tiedot (Hilma)A
Read-onlyIdempotent

Palauttaa yhden Hilma-hankintailmoituksen kaikki olennaiset tiedot: koko kuvaus, arvioitu arvo, menettely, CPV-koodit, osat, vastuullisuuskriteerit, TED-numero ja linkit. Anna hakusana tai ilmoitusnumero. Täydentää hae_julkiset_hankinnat_hilma -listahakua.

ParametersJSON Schema
NameRequiredDescriptionDefault
hakusanaYesHakusana tai ilmoitusnumero (esim. "2024-004717", "tietoturvan konsultointi 2M-IT").
vain_aktiivisetNoJos true, huomioidaan vain ilmoitukset joiden määräaika ei ole umpeutunut.

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the description's safety burden is low. It usefully adds that the tool returns a single notice with comprehensive fields, but it does not disclose behavior such as what happens when the search term matches nothing or multiple notices.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler: the first explains the return value, the second gives the input requirement and the relationship to the sibling tool. Every clause earns its place and the key differentiator is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read-only lookup tool with strong annotations and no output schema, the description covers input, output fields, and sibling positioning. An agent has enough information to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents both parameters with an example for hakusana and the meaning of vain_aktiiviset. The description lightly restates the input instruction but adds no semantic value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Palauttaa') and resource ('yhden Hilma-hankintailmoituksen') and enumerates the returned data fields, so the purpose is unmistakable. It also explicitly distinguishes itself from the sibling list search by positioning itself as the complement for retrieving one notice's full details.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Anna hakusana tai ilmoitusnumero' gives a direct invocation instruction, and 'Täydentää hae_julkiset_hankinnat_hilma -listahakua' clearly establishes this tool as the follow-up to a list search. It does not explicitly state when not to use alternatives, but the sibling relationship is clear enough for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hae_julkiset_hankinnat_hilmaHae julkiset hankinnat (Hilma)A
Read-onlyIdempotent

Hakee julkisia hankintailmoituksia Hilmasta (hankintailmoitukset.fi) hakusanalla. Palauttaa ilmoituksen otsikon, hankintayksikön, tarjousten määräajan ja suorat linkit ilmoitukseen ja tarjouspyyntöasiakirjoihin. Oletuksena vain avoinna olevat ilmoitukset.

ParametersJSON Schema
NameRequiredDescriptionDefault
hakusanaYesVapaa hakusana, esim. "it-konsultointi", "pilvipalvelut", "siivous", "rakennusurakka".
max_tuloksetNoPalautettavien ilmoitusten enimmäismäärä (oletus 5).
vain_aktiivisetNoJos true (oletus), näytetään vain ilmoitukset joiden tarjousten määräaika ei ole umpeutunut.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering the safety profile. The description adds value by stating the default behavior (only open notices are returned) and enumerating the returned fields (title, entity, deadline, links). It does not contradict annotations and provides useful behavioral context beyond what annotations imply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with zero filler. The main action and source are front-loaded, and the return values and default filter are stated efficiently. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple search tool with three well-documented parameters and no output schema, the description is nearly complete. It lists the returned fields and the default filtering behavior, which is enough for an agent to call the tool correctly. Minor gaps like pagination or result ordering are not critical given the low complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each parameter (hakusana, max_tulokset, vain_aktiiviset) is already documented with meaning and defaults. The description adds minimal extra semantics, only echoing the search word and default active-only behavior. With full schema coverage, a baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action: searching public procurement notices from Hilma using a search word. It specifies the resource (Hilma, hankintailmoitukset.fi), the input (hakusanalla), and the output fields (title, procuring entity, deadline, links). This is specific enough to distinguish it from sibling tools like hae_hankintailmoitus or hae_yritystiedot_prh, even without explicit comparison.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (when searching for Finnish public procurement notices), but it does not provide explicit guidance on when not to use it or how it compares to sibling tools. No exclusions or alternatives are mentioned, leaving the agent to infer usage from the purpose statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hae_kaupparekisteri_muutokset_prhHae kaupparekisterin muutokset (PRH)A
Read-onlyIdempotent

Hakee yrityksen perustiedot ja aikajanan kaupparekisteriin rekisteröidyistä ilmoituksista PRH:n avoimesta rajapinnasta: hallitus- ja nimenmuutokset, tilinpäätökset, osakepääoman muutokset, konkurssi/saneeraus/selvitystila jne. Anna Y-tunnus (1234567-8) tai yrityksen nimi. Täysi kattavuus kaikkiin kaupparekisteriyrityksiin.

ParametersJSON Schema
NameRequiredDescriptionDefault
hakusanaYesY-tunnus muodossa 1234567-8 TAI yrityksen nimi / sen osa (esim. "Reaktor").
max_tuloksetNoKuinka monta viimeisintä rekisteröityä ilmoitusta näytetään (oletus 10).

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering safety and idempotency. The description adds that it uses PRH's open API and covers all trade register companies, which is useful context. It does not mention rate limits, error handling, or return format specifics, but given the annotations, this is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the primary purpose and examples, followed by input instructions. Every sentence earns its place; there is no fluff or redundant detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, idempotent tool with 2 parameters and no output schema, the description covers the input format, the types of changes returned, and the data source. It does not detail pagination or ordering, but the max_tulokset parameter handles limits. Missing error behavior is mitigated by the openWorldHint annotation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: both parameters (hakusana and max_tulokset) have descriptive text. The description repeats the input format ('Anna Y-tunnus tai yrityksen nimi') but does not add new meaning beyond the schema. Since the schema already covers semantics, the description adds marginal value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Hakee' - fetches) and resource ('yrityksen perustiedot ja aikajanan kaupparekisteriin rekisteröidyistä ilmoituksista' - company basic info and timeline of registered notices) and lists concrete change types (board/name changes, financial statements, share capital, bankruptcy). This clearly distinguishes it from the sibling hae_yritystiedot_prh, which presumably only retrieves basic company info.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear input guidance ('Anna Y-tunnus (1234567-8) tai yrityksen nimi') and states full coverage ('Täysi kattavuus kaikkiin kaupparekisteriyrityksiin'), providing context for when to use it. However, it does not explicitly mention when not to use it or point to alternative tools, so it stops short of explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hae_polttoaineen_hinnatHae polttoaineen hinnatA
Read-onlyIdempotent

Hakee bensiinin (95 E10, 98 E5), dieselin ja kevyen polttoöljyn keskihinnan viimeisimmältä tilastokuukaudelta sekä muutoksen edelliseen kuukauteen ja vuoden takaiseen. Lähde: Tilastokeskus (kuukauden keskihinta).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true, covering safety and re-call behavior. The description adds the source (Statistics Finland monthly average) and the exact metrics returned, which is context beyond the annotations. It does not disclose output format or potential delays in data release, but for a read-only retrieval tool this is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded Finnish sentence that states the resource, the fuel types, the timeframe, and the source without redundancy. Every clause contributes concrete information; no filler or vague phrasing. Easily skimmable for an AI agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Without an output schema, the description bears the responsibility of explaining return values. It clearly states the returned metrics (average prices, changes vs previous month and year), so the agent knows the data shape. It does not specify units (e.g., euros per litre) or exact statistical period lags, but for a query tool the core semantics are complete. A 4 is fair because the description omits currency/unit confirmation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the input schema is trivially complete. The description therefore carries all the semantic meaning about what data is returned. It adds value by defining the specific fuel types and the comparison periods, going beyond the empty schema. Baseline 4 for no parameters is appropriate, and the description does not need to explain parameters that do not exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (Hakee), a concrete resource (fuel average prices), specific fuel types (95 E10, 98 E5, diesel, light fuel oil), and a temporal scope (latest statistical month plus changes vs previous month and year). It clearly distinguishes itself from siblings like hae_asuntojen_hinnat (housing prices) and hae_saa (weather) by naming its exact content and source.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There are no explicit exclusions or alternative recommendations, but the description clearly implies when to use this tool: any time the agent needs fuel price statistics from Statistics Finland. Since the sibling names are all distinct resources, a reader can infer the appropriate selection without confusion. Lacks explicit 'when-not-to-use' guidance, but the resource name is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hae_porssisahkoHae pörssisähkön hintaA
Read-onlyIdempotent

Hakee Suomen pörssisähkön (spot) tuntihinnat: hinta nyt, seuraavat tunnit sekä vuorokauden halvin ja kallein tunti. Hinnat c/kWh, sisältävät ALV 25,5 %. Lähde: porssisahko.net (avoin, ei API-avainta).

ParametersJSON Schema
NameRequiredDescriptionDefault
tunnitNoKuinka monta tulevaa tuntia listataan (oletus 12, max 48).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable context: data source (porssisahko.net), no authentication, unit/VAT details, and specific data points returned. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no redundancy. The core purpose is front-loaded, followed by output specifics and source. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple one-parameter tool and no output schema, the description adequately explains the returned data (current, next hours, min/max, units, VAT). It doesn't specify the exact output format, but that is not critical for selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The sole parameter 'tunnit' is fully described in the schema (default 12, max 48). The description mentions 'next hours' but adds no new meaning beyond the schema. With 100% schema coverage, baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches Finnish exchange electricity spot hourly prices, including current, next hours, and daily min/max, with units (c/kWh) and VAT. This distinguishes it from all sibling tools (weather, procurement, company data).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage (need electricity prices) and mentions the source is open with no API key, providing context. It does not explicitly name alternatives or exclusions, but sibling tools cover unrelated domains, so differentiation is inherent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hae_saaHae sääennuste (Ilmatieteen laitos)A
Read-onlyIdempotent

Hakee sääennusteen (lämpötila, tuuli, sade, ilmankosteus) tunneittain suomalaiselle paikkakunnalle Ilmatieteen laitoksen avoimesta datasta. Anna paikkakunnan nimi ja halutessasi tuntimäärä.

ParametersJSON Schema
NameRequiredDescriptionDefault
tunnitNoKuinka monta tulevaa tuntia näytetään (oletus 12, max 48).
paikkakuntaYesPaikkakunta Suomessa, esim. "Helsinki", "Rovaniemi", "Tampere".

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering the safety profile. The description adds valuable behavioral context: data source, exact forecast variables, and hourly granularity. It does not disclose rate limits or error behavior, but that is less critical given the strong annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler. The first sentence front-loads the core action, resource, and data fields; the second gives a direct usage instruction. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with two parameters and no output schema, the description conveys the essential behavior: source, data fields, hourly interval, and required inputs. It could mention units (e.g., °C, m/s) or response format, but these are minor omissions for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: both 'paikkakunta' and 'tunnit' have meaningful descriptions with examples and constraints. The description only restates the input pattern without adding new parameter-level semantics, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses a specific verb ('Hakee sääennusteen'), names the resource (Ilmatieteen laitoksen avoin data), and specifies scope (suomalaiselle paikkakunnalle, tunneittain). The included data fields (lämpötila, tuuli, sade, ilmankosteus) make it clearly distinct from sibling tools about procurement, electricity, inflation, or VAT.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear instructions on what to provide ('Anna paikkakunnan nimi ja halutessasi tuntimäärä') and the context in which to use it: fetching hourly weather for a Finnish locality. It does not explicitly name alternatives, but none of the sibling tools overlap with weather, so the usage context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hae_yritystiedot_prhHae yritystiedot (PRH / YTJ)A
Read-onlyIdempotent

Hakee suomalaisen yrityksen perustiedot PRH:n avoimesta YTJ-rajapinnasta. Anna joko Y-tunnus (1234567-8) tai yrityksen nimi. Palauttaa nimen, Y-tunnuksen, yritysmuodon, rekisteröintipäivän ja toiminnan tilan.

ParametersJSON Schema
NameRequiredDescriptionDefault
hakusanaYesY-tunnus muodossa 1234567-8 TAI yrityksen nimi / sen osa (esim. "Reaktor").

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, so the description does not need to repeat those. It adds useful behavioral context by specifying the data source (PRH/YTJ) and the exact returned fields (name, business ID, company form, registration date, status), which is valuable beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with zero fluff. The first sentence states the action and source; the second states the input format and output fields. It is front-loaded and every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only lookup with one parameter and no output schema, the description covers everything an agent needs: what the tool does, how to provide the input, and what the response contains. No critical information is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the single parameter 'hakusana', which already explains the accepted formats (Y-tunnus or company name/part). The description essentially repeats the same input guidance, adding no new semantic meaning. Baseline 3 applies because the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Hakee' (fetches) and the resource 'suomalaisen yrityksen perustiedot PRH:n avoimesta YTJ-rajapinnasta' (basic info of a Finnish company from PRH's open YTJ interface). It also lists the exact output fields and input options, making it easily distinguishable from sibling tools like hae_hankintailmoitus or hae_saa.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: it is for fetching company basic info, so an agent can infer when to use it. However, it does not explicitly mention when not to use it or compare to alternatives like hae_kaupparekisteri_muutokset_prh. Since the tool's scope is obvious from the name and description, this is only a minor gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

laske_inflaatioLaske inflaatio / rahan ostovoimaA
Read-onlyIdempotent

Muuntaa rahasumman ostovoiman vuosien välillä Tilastokeskuksen elinkustannusindeksillä (yhtenäinen sarja vuodesta 1951). Esim. "paljonko 1000 € vuonna 1985 on nyt". Anna summa (€) ja lähtövuosi; kohdevuosi oletuksena viimeisin.

ParametersJSON Schema
NameRequiredDescriptionDefault
summaYesRahasumma euroina, jonka ostovoima muunnetaan.
vuosi_alkuYesLähtövuosi (summan vuosi), 1951 tai myöhemmin.
vuosi_loppuNoKohdevuosi. Oletus: viimeisin saatavilla oleva vuosi.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, so the agent knows this is a safe, side-effect-free read operation. The description adds valuable behavioral context beyond that: it specifies the data source (Tilastokeskuksen elinkustannusindeksi), the coverage from 1951, and the default behavior of the target year. It does not disclose potential limitations (e.g., index is annual, not monthly), but for a simple conversion tool with these annotations, the added context is solid.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact — two sentences. The first sentence states the verb, resource, and data source; the second provides a concrete example and the default behavior. There is zero filler, and the most critical information (what it does, example, default) is front-loaded. It earns its place without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with three parameters, a 100% covered schema, and annotations indicating a read-only, idempotent operation, the description covers the essentials: purpose, example, and default target year. It does not specify the exact return format, but the example implies a numeric monetary amount, which is reasonable for this kind of conversion. Given no output schema exists, a slight gap remains, but the description is adequate for an agent to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% — all three parameters (summa, vuosi_alku, vuosi_loppu) have descriptive text explaining their roles and constraints (e.g., minimum 1951, optional target year). The description reiterates the example and the default but does not add new parameter-specific detail beyond the schema. Given the high coverage, a baseline of 3 is appropriate; the description adds marginal value but does not fully compensate for any missing details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb 'Muuntaa' (converts) and a precise resource: purchasing power of a money amount between years using Statistics Finland's cost-of-living index. It includes a concrete example ('paljonko 1000 € vuonna 1985 on nyt') that clarifies the intent. None of the sibling tools handle inflation or monetary conversion, so the purpose is unambiguous and clearly distinguished.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear usage context via the example and states the default for the target year (most recent). It does not explicitly enumerate when not to use it or name alternatives, but since the sibling tools are all unrelated (procurement, stock prices, weather, VAT, etc.), the intended use case is evident. The lack of explicit exclusions is a minor gap, but the example and scope ('vuodesta 1951') provide sufficient guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tarkista_alv_tunnusTarkista EU-ALV-tunnus (VIES)A
Read-onlyIdempotent

Tarkistaa EU:n ALV-tunnuksen (VAT number) voimassaolon EU:n VIES-palvelusta ja palauttaa rekisteröidyn nimen ja osoitteen. Anna tunnus maakoodilla (esim. FI01098628, DE811128135). Käytä ennen ALV 0 % -laskutusta EU-maahan.

ParametersJSON Schema
NameRequiredDescriptionDefault
alv_tunnusYesEU:n ALV-tunnus maakoodilla, esim. "FI01098628", "DE811128135". Suomalaisen Y-tunnuksen (1234567-8) voi antaa myös sellaisenaan.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, covering safety and idempotency. The description adds context about the VIES service and the returned data (name and address), which goes beyond the annotations. It does not mention potential errors or latency, but that is not critical for a simple read-only check.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences. The first states purpose and output, the second gives usage and formatting examples. There is no fluff or repetition, and it is front-loaded with the most important information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with a single parameter, no output schema, and strong annotations, the description covers the essential points: what it does, what it returns, and when to use it. Nothing critical is missing for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description covers 100% of the parameter with format examples, and the tool description reinforces this with explicit examples and the note about Finnish Y-tunnus. This adds clarity beyond the schema, though the schema already carries the main burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'tarkistaa' (check) and the resource (EU VAT number via VIES), and specifies that it returns the registered name and address. It is distinct from sibling tools which cover other domains like procurement, company data, or weather.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides an explicit usage scenario: 'Käytä ennen ALV 0 % -laskutusta EU-maahan' (use before VAT 0% invoicing to an EU country). It does not explicitly exclude other uses or name alternatives, but the sibling tools are clearly unrelated, so the guidance is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tarkista_ibanTarkista IBAN-tilinumeroA
Read-onlyIdempotent

Tarkistaa IBAN-tilinumeron rakenteen ja tarkistusnumeron (mod-97). Suomalaiselle IBANille näyttää myös kansallisen tilinumeron ja arvion pankista. Ei tee verkkokutsuja.

ParametersJSON Schema
NameRequiredDescriptionDefault
ibanYesIBAN-tilinumero, esim. "FI21 1234 5600 0007 85" (välit sallittu).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only and idempotent behavior, and the description adds the important trait that no network calls are made, differentiating it from the fetching siblings. It also discloses that the bank result is only an estimate ('arvion pankista') and that the extra fields apply only to Finnish IBANs. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences each carry distinct information: the core validation, the Finnish-specific behavior, and the offline nature. There is no filler, no repetition of schema details, and the most important action is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter local validation tool with full annotations, the description is largely complete and gives enough context to select and call it correctly. It does not specify the exact return shape or behavior for invalid or non-Finnish IBANs, which would be useful but is not strictly required given the absence of an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers the single parameter fully, including an example and a note that spaces are allowed, so the description does not need to repeat format details. The description adds contextual meaning about what is done with the value (structure and mod-97 validation), which is useful but does not go beyond the already comprehensive schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Tarkistaa') and resource (IBAN), and specifies precisely what is validated: structure and mod-97 check digits. It also distinguishes itself from the 'hae_*' sibling tools by noting it makes no network calls and by describing Finnish-specific extra output.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The usage context is clear: use this tool to validate an IBAN's structure and checksum, and for Finnish IBANs to get the national account number and a bank estimate. It does not explicitly name alternatives like tarkista_alv_tunnus, but the explicit 'Ei tee verkkokutsuja' note helps an agent know not to use it for live verification.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

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

  1. 3 tool updatesv0.5.0
    • Addedhae_asuntojen_hinnat
    • Addedhae_polttoaineen_hinnat
    • Addedtarkista_iban
  2. 6 tool updatesv0.4.0
    • Addedhae_hankintailmoitus
    • Addedhae_kaupparekisteri_muutokset_prh
    • Addedhae_porssisahko
    • Addedhae_saa
    • Addedlaske_inflaatio
    • Addedtarkista_alv_tunnus
  3. 2 tool updatesv0.1.0
    • First observedhae_julkiset_hankinnat_hilma
    • First observedhae_yritystiedot_prh

TDQS

A4.3/5.0

Scored across 11 tools

Disambiguation5/5

Every tool targets a clearly different dataset or operation. Even adjacent tools such as PRH company info vs. PRH changes, procurement search vs. notice detail, and IBAN vs. VAT validation are easy to distinguish by name and description.

Naming Consistency5/5

The tools follow a predictable Finnish pattern: hae_ for data lookups, tarkista_ for validations, and laske_ for calculations. The snake_case convention and object-plus-source naming (e.g. hae_polttoaineen_hinnat, hae_kaupparekisteri_muutokset_prh) are consistent throughout.

Tool Count5/5

With 11 tools, the surface is broad enough to cover several Finnish public-data domains without feeling bloated. Each tool serves a concrete, non-redundant purpose and the count fits the general-purpose national data scope.

Completeness4/5

The set covers paired operations well (procurement list/detail, company info/changes) and includes validation and calculation utilities. A couple of conceivable additions exist, such as a Finnish business ID validator or population-data lookup, but the current surface has no obvious dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides access to the Finnish company registry (PRH/YTJ) to search for businesses and retrieve detailed information using Business IDs. It enables users to perform industry-specific searches and track recent company registrations through official government open data.
    2 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server for the Finnish Business Register (PRH/YTJ). Look up any Finnish company by Business ID (Y-tunnus) or name.
    4 npm
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides access to Finnish government public procurement notices. Enables querying procurement data via natural language through the Pipeworx gateway.
    7 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server for Finnish public procurement (HILMA): search tenders, awards and procurement plans by keyword, CPV, region and buyer, and fetch full notice details.
    4 npm
    MIT