# Hilma Mcp

> MCP server for Finnish public procurement notices (Hilma). Built by Aimiten.

- **Type:** MCP server
- **Install:** `agentstack add mcp-aimiten-hilma-mcp`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [Aimiten](https://agentstack.voostack.com/s/aimiten)
- **Installs:** 0
- **Category:** [Integrations](https://agentstack.voostack.com/c/integrations)
- **Latest version:** 1.1.1
- **License:** MIT
- **Upstream author:** [Aimiten](https://github.com/Aimiten)
- **Source:** https://github.com/Aimiten/hilma-mcp

## Install

```sh
agentstack add mcp-aimiten-hilma-mcp
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# hilma-mcp

MCP (Model Context Protocol) -serveri Suomen julkisille hankintailmoituksille — [hankintailmoitukset.fi](https://hankintailmoitukset.fi) (Hilma).

Mahdollistaa hankintailmoitusten haun suoraan Claude-assistentista ilman erillistä selainta.

> **Kieliversio:** Ohjeet suomeksi alla. English instructions further down.

---

## Vaatimukset

- [Node.js](https://nodejs.org/) versio 18 tai uudempi
- Claude Desktop tai Claude Cowork (MCP-tuki)
- Hilma AVP API -avain (ks. alla)

---

## Asennus

### 1. Kloonaa repo

```bash
git clone https://github.com/Aimiten/hilma-mcp.git
cd hilma-mcp
```

### 2. Asenna riippuvuudet ja buildaa

```bash
npm install
npm run build
```

Tämä luo `dist/index.js`-tiedoston, jota Claude ajaa.

### 3. Luo .env-tiedosto

```bash
cp .env.example .env
```

Avaa `.env` tekstieditorissa ja lisää API-avaimesi:

```
HILMA_API_KEY=oma-avp-read-avain-tähän
HILMA_READ_API_KEY=oma-avp-read-avain-tähän
```

> **Huom:** Molemmat kentät käyttävät **samaa avainta** — `avp-read`-tuote sisältää jo Read API (EForms) -rajapinnan, joten erillistä tilausta ei tarvita.

Hanki avain ilmaiseksi:
1. Mene osoitteeseen https://hns-hilma-prod-apim.developer.azure-api.net/
2. Rekisteröidy tai kirjaudu → **Products → avp-read → Subscribe**
3. Kopioi Primary key Profile-sivulta

> **Huom:** `.env`-tiedostoa ei koskaan commitoida GitHubiin — se on jo `.gitignore`:ssa.

### 4. Lisää Claude-konfiguraatioon

Avaa Claude Desktopin konfiguraatiotiedosto:

| Käyttöjärjestelmä | Polku |
|-------------------|-------|
| **macOS** | `~/Library/Application Support/Claude/claude_desktop_config.json` |
| **Windows** | `%APPDATA%\Claude\claude_desktop_config.json` |

Lisää tai muokkaa `mcpServers`-osiota:

```json
{
  "mcpServers": {
    "hilma": {
      "command": "node",
      "args": ["/ABSOLUUTTINEN/POLKU/hilma-mcp/dist/index.js"]
    }
  }
}
```

**Tärkeää:** Korvaa `/ABSOLUUTTINEN/POLKU/hilma-mcp` oikealla polulla omalla koneellasi. Esimerkiksi:
- macOS: `/Users/sinunnimesi/hilma-mcp/dist/index.js`
- Windows: `C:\\Users\\sinunnimesi\\hilma-mcp\\dist\\index.js`

### 4. Käynnistä Claude uudelleen

Hilma ilmestyy connectors-listaan uudelleenkäynnistyksen jälkeen.

---

## API-avain

Serveri **vaatii** oman API-avaimen — sitä ei ole bundlattu koodiin tietoturvasyistä.

1. Rekisteröidy ilmaiseksi: https://hns-hilma-prod-apim.developer.azure-api.net/
2. Lisää avain `.env`-tiedostoon (suositeltu):
   ```
   HILMA_API_KEY=oma-avaimesi-tähän
   ```
3. Tai anna se suoraan Claude-konfiguraatiossa:
   ```json
   {
     "mcpServers": {
       "hilma": {
         "command": "node",
         "args": ["/polku/hilma-mcp/dist/index.js"],
         "env": {
           "HILMA_API_KEY": "oma-avaimesi-tähän"
         }
       }
     }
   }
   ```

---

## Työkalut

| Työkalu | Kuvaus | Vaatii |
|---------|--------|--------|
| `search_notices` | Hae ilmoituksia CPV-koodeilla, hakusanalla, päivämäärällä | HILMA_API_KEY |
| `get_notice_summary` | Yksittäisen ilmoituksen metatiedot noticeId:llä | HILMA_API_KEY |
| `get_expiring_soon` | Ilmoitukset joiden deadline on N päivän sisällä | HILMA_API_KEY |
| `get_notice_full` | Täysi eForms XML + yhteystiedot (BT-502/503/506) | HILMA_READ_API_KEY |

### `search_notices` — Hankintailmoitusten haku

| Parametri | Tyyppi | Kuvaus |
|-----------|--------|--------|
| `search` | string | Vapaatekstihaku. `"*"` = kaikki. |
| `cpv_codes` | string[] | CPV-koodit, esim. `["71200000", "72000000"]`. OR-logiikka. |
| `notice_type` | string | `ContractNotices` / `ContractAwardNotices` / `PlanNotices` |
| `procurement_type` | string | `services` / `works` / `supplies` |
| `procedure_type` | string | `open` / `restricted` / `negotiated` |
| `days` | number | Viimeiset N päivää |
| `hours` | number | Viimeiset N tuntia |
| `top` | number | Max tuloksia (1–100, oletus 20) |

### `get_notice_summary` — Yksittäisen ilmoituksen yhteenveto

| Parametri | Tyyppi | Kuvaus |
|-----------|--------|--------|
| `notice_id` | number | Ilmoituksen numeerinen ID |

Käyttää search-APIa — ei vaadi erillistä tilausta. Palauttaa kaikki metatiedot: tilaaja, deadline, arvo, CPV, portaali-URL.

### `get_expiring_soon` — Lähestyvät deadlinet

| Parametri | Tyyppi | Kuvaus |
|-----------|--------|--------|
| `days` | number | Hae deadlinet seuraavan N päivän sisällä |
| `cpv_codes` | string[] | Rajaa CPV-koodeilla (valinnainen) |

Järjestää tulokset deadlinen mukaan nousevaan järjestykseen.

### `get_notice_full` — Täydet tiedot eForms XML:stä

| Parametri | Tyyppi | Kuvaus |
|-----------|--------|--------|
| `notice_id` | number | Ilmoituksen numeerinen ID |

**Vaatii HILMA_READ_API_KEY** (sama avain kuin HILMA_API_KEY — sisältyy `avp-read`-tilaukseen). Palauttaa:
- Yhteystiedot: BT-502 (nimi), BT-503 (sähköposti), BT-506 (puhelin)
- Tarjousportaalin URL:t
- Koko eForms XML -raakadata

---

## API-viite

Perustuu viralliseen [Hilma API](https://github.com/Hankintailmoitukset/hilma-api) -dokumentaatioon.

- Hakuendpoint: `POST https://api.hankintailmoitukset.fi/avp/eformnotices/docs/search`
- Yksittäinen ilmoitus: `GET https://api.hankintailmoitukset.fi/avp/eformnotices/docs/{noticeId}`
- Autentikointi: `Ocp-Apim-Subscription-Key` -header

---

## English

### Quick install

```bash
git clone https://github.com/Aimiten/hilma-mcp.git
cd hilma-mcp
npm install && npm run build
cp .env.example .env   # then add your API key to .env
```

Get a free API key at: https://hns-hilma-prod-apim.developer.azure-api.net/

Add to Claude Desktop config (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):

```json
{
  "mcpServers": {
    "hilma": {
      "command": "node",
      "args": ["/absolute/path/to/hilma-mcp/dist/index.js"]
    }
  }
}
```

Restart Claude. The Hilma connector will appear in the connectors list.

---

## Lisenssi / License

MIT — ks. [LICENSE](LICENSE).

---

## Aimiten

Tämä MCP-serveri on toteutettu osana **[Aimitenin](https://aimiten.fi)** AI-konsultointia. Aimiten Oy auttaa suomalaisia pk-yrityksiä ottamaan tekoälyn (Claude, Copilot, Gemini, n8n) käytäntöön — koulutus, konsultointi ja kevyet Managed Agents -toteutukset.

- 🌐 **Verkkosivu:** [aimiten.fi](https://aimiten.fi)
- 📖 **Claude Code -opas (suomeksi):** [aimiten.fi/oppaat/claude-ai](https://aimiten.fi/oppaat/claude-ai)
- 🛠️ **MCP-palvelimet & integraatiot:** [aimiten.fi/palvelut](https://aimiten.fi/palvelut)
- 👤 **Tekijät:** Sampsa Sironen (CEO) + Ville Grönlund (Co-Founder)

This MCP server is built and maintained by **[Aimiten](https://aimiten.fi)**, a Finnish AI consultancy specializing in Claude, Copilot, and Gemini integrations for SMEs.

## Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [Aimiten](https://github.com/Aimiten)
- **Source:** [Aimiten/hilma-mcp](https://github.com/Aimiten/hilma-mcp)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v1.1.1 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** yes
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **1.1.1** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/mcp-aimiten-hilma-mcp
- Seller: https://agentstack.voostack.com/s/aimiten
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
