Skip to main content
Glama
kimhjort

aria-mcp-elpriser

by kimhjort

aria-mcp-elpriser

MCP server exposing Danish electricity spot prices (DK1/DK2) — keyless, open-source.

Designed for use with ARIA, Kim Hjort's personal AI assistant, but works with any MCP-compatible client.

What it does

Provides four tools to fetch real-time and day-ahead Danish electricity spot prices from elprisenligenu.dk, which publishes Nord Pool spot prices sourced via Energi Data Service.

Important: All prices are raw Nord Pool spot prices and exclude Danish taxes, tariffs (Energinet, network operator), and transport costs. The total consumer price on your electricity bill is significantly higher.

Related MCP server: mcp-danish-energy

Tools

Tool

Description

get_prices

Hourly spot prices for a date (24 entries with local Copenhagen timestamps)

get_current_price

Spot price for the current hour

get_cheapest_hours

The N cheapest hours for a date, sorted ascending by price

get_price_summary

Min / max / avg + cheapest and most expensive hour for a date

get_prices({ area?, date? })

Returns an array of 24 hourly { DKK_per_kWh, time_start_local, time_end_local } entries.

get_current_price({ area? })

Returns the single entry covering the current Europe/Copenhagen hour.

get_cheapest_hours({ area?, date?, count? })

Returns the count cheapest hours (default 3) sorted by price ascending. Use this to advise on the best time to run the dishwasher or charge an EV.

get_price_summary({ area?, date? })

Returns { area, date, min_DKK_per_kWh, max_DKK_per_kWh, avg_DKK_per_kWh, cheapest_hour, most_expensive_hour }.

Common parameters

  • area"DK1" (West Denmark, postal codes > 4999) or "DK2" (East Denmark). Defaults to the DEFAULT_PRICE_AREA env var, or "DK2" if not set.

  • date"today" (default), "tomorrow", or "YYYY-MM-DD".

Tomorrow's prices

Tomorrow's prices are published by Nord Pool around 13:00 CET. Before that, the API returns 404 and the tools return a clear message asking to try again later.

Data source & attribution

Requirements

  • Node.js >= 20 (uses global fetch and Intl.DateTimeFormat)

Environment variables

Variable

Default

Description

DEFAULT_PRICE_AREA

DK2

Default price area when the area parameter is omitted. Set to DK1 for West Denmark.

ARIA configuration

Add to your ARIA McpServers configuration:

{
  "Name": "elpriser",
  "Command": "npx",
  "Args": ["-y", "aria-mcp-elpriser"],
  "Env": {
    "DEFAULT_PRICE_AREA": "DK2"
  }
}

Omit the Env block to use the default (DK2). Set DEFAULT_PRICE_AREA to DK1 if you are on West Denmark (postal codes above 4999, i.e. Jutland and Funen outside the Lillebælt bridge area).

Development

npm install
npm run build
npm test
node dist/index.js   # runs the stdio MCP server

License

MIT — see LICENSE.

Available Tools

4 tools
get_cheapest_hoursA

Fetch the cheapest electricity hours for a given date, sorted by price ascending. Use this to advise Kim on the best time to run the dishwasher, EV charging, etc. IMPORTANT: Prices are raw Nord Pool spot prices and EXCLUDE Danish taxes, tariffs, and transport costs. The total consumer price is significantly higher.

ParametersJSON Schema
NameRequiredDescriptionDefault
areaNoPrice area: "DK1" (West Denmark) or "DK2" (East Denmark, default). Defaults to the DEFAULT_PRICE_AREA env var if set, otherwise "DK2".
dateNoDate to query: "today" (default), "tomorrow", or a date in YYYY-MM-DD format. Note: tomorrow's prices are published around 13:00 CET — the API returns 404 before that.
countNoNumber of cheapest hours to return (default 3, max 24).

TDQS

A4.6/5.0
Behavior5/5

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

Discloses that prices are raw spot prices excluding taxes/tariffs, and notes 404 risk for tomorrow's prices before 13:00 CET. No annotations, so description carries full burden and does well.

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?

Short and front-loaded with purpose. Every sentence earns its place; no wasted words.

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?

Covers main behavioral aspects but lacks return format details (e.g., what fields are in each result). Still adequate given no output schema.

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?

Schema coverage is 100% with good descriptions for each parameter. The description adds value with the tax note, but beyond that, it doesn't significantly extend schema info.

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 cheapest electricity hours for a given date, sorted by price. It distinguishes from siblings like get_current_price and get_prices by focusing on cheapest hours.

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?

Explicitly advises using it for advising Kim on best times for appliances. Implicitly differentiates from siblings but doesn't explicitly state when not to use it or mention alternatives.

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

get_current_priceA

Fetch the electricity spot price (DKK/kWh) for the current hour in Europe/Copenhagen. IMPORTANT: Prices are raw Nord Pool spot prices and EXCLUDE Danish taxes, tariffs, and transport costs. The total consumer price is significantly higher.

ParametersJSON Schema
NameRequiredDescriptionDefault
areaNoPrice area: "DK1" (West Denmark) or "DK2" (East Denmark, default). Defaults to the DEFAULT_PRICE_AREA env var if set, otherwise "DK2".

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It clearly discloses critical behavioral traits: prices are raw spot prices (ex Danish taxes, tariffs, transport costs) and are higher for consumers. It also notes default area behavior including env var. However, it does not mention potential failure modes if no data for current hour.

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 an important caveat. It is front-loaded and every sentence adds value. No wasted words.

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

Completeness3/5

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

Given no output schema, the description does not detail the return format (e.g., number or object). It states unit (DKK/kWh) and time context, but an agent may need to infer the exact structure. For a low-complexity tool, this is acceptable but leaves room for ambiguity.

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?

Schema coverage is 100% for the single parameter 'area', but the description adds meaningful context beyond the schema by mentioning the DEFAULT_PRICE_AREA env var and default value logic. This helps the agent understand parameter behavior without relying entirely on schema documentation.

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 'Fetch', the resource 'electricity spot price', and specific context: current hour, DKK/kWh, Europe/Copenhagen. It differentiates from siblings (get_cheapest_hours, get_prices, get_price_summary) by focusing on the current hour spot price.

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 usage for current spot price but provides no explicit guidance on when to use this tool versus alternatives like get_cheapest_hours or get_prices. There is no mention of when not to use it.

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

get_pricesA

Fetch hourly electricity spot prices (DKK/kWh) for a given date and Danish price area. Returns an array of 24 hourly entries with local Copenhagen timestamps. IMPORTANT: Prices are raw Nord Pool spot prices and EXCLUDE Danish taxes, tariffs, and transport costs. The total consumer price is significantly higher.

ParametersJSON Schema
NameRequiredDescriptionDefault
areaNoPrice area: "DK1" (West Denmark) or "DK2" (East Denmark, default). Defaults to the DEFAULT_PRICE_AREA env var if set, otherwise "DK2".
dateNoDate to query: "today" (default), "tomorrow", or a date in YYYY-MM-DD format. Note: tomorrow's prices are published around 13:00 CET — the API returns 404 before that.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses that prices exclude taxes, tariffs, and transport costs, and warns that tomorrow's prices may return 404 before 13:00 CET. This provides key behavioral context beyond the raw schema.

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 extremely concise: two sentences plus an important warning. Every sentence adds critical information without redundancy. The key purpose and notable behavioral note are 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?

Given no output schema, the description explains the return format (array of 24 hourly entries with Copenhagen timestamps) and covers purpose, parameters, and key behavioral notes. It is complete for a simple fetch tool, though a brief comparison to siblings would strengthen context.

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 already describes both parameters with 100% coverage. The description adds value by explaining default behaviors (env var for area, 'today' default for date) and the 404 condition for date. This enhances understanding beyond the schema alone.

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 hourly electricity spot prices for a given date and Danish price area, specifying the unit (DKK/kWh) and format (24 hourly entries). It distinguishes raw spot prices from consumer prices, aligning with sibling tools like get_cheapest_hours, which implies a complementary function.

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 (to get raw spot prices) and notes that consumer prices are higher, but it does not explicitly tell when not to use this tool or mention alternatives like get_current_price or get_price_summary. Usage guidance is implicit rather than directive.

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

get_price_summaryA

Fetch a summary of electricity spot prices for a given date: min, max, average, cheapest hour, and most expensive hour. Good for a concise one-line briefing. IMPORTANT: Prices are raw Nord Pool spot prices and EXCLUDE Danish taxes, tariffs, and transport costs. The total consumer price is significantly higher.

ParametersJSON Schema
NameRequiredDescriptionDefault
areaNoPrice area: "DK1" (West Denmark) or "DK2" (East Denmark, default). Defaults to the DEFAULT_PRICE_AREA env var if set, otherwise "DK2".
dateNoDate to query: "today" (default), "tomorrow", or a date in YYYY-MM-DD format. Note: tomorrow's prices are published around 13:00 CET — the API returns 404 before that.

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It discloses that prices exclude Danish taxes, tariffs, and transport costs, and notes the data source (Nord Pool). However, it does not state that the tool is read-only or mention any other behavioral traits (e.g., rate limits, destructive actions). The important caveat is covered.

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 concise (two sentences plus an important note), front-loaded with purpose, and has no fluff. Every sentence adds value: what it does, use case, and critical caveat.

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 no output schema, the description explains what summary metrics are returned. It covers the key nuance about price exclusivity. For a simple tool with 2 parameters, it is fairly complete, though could optionally mention response format.

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 baseline is 3. The description does not add new meaning beyond what the schema already provides for the 'area' and 'date' parameters. It mentions defaults briefly but repeats schema info.

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 a summary of electricity spot prices, listing exact metrics (min, max, average, cheapest hour, most expensive hour). It distinguishes from sibling tools like get_cheapest_hours or get_prices by being a concise summary, not a list or single value.

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 says 'Good for a concise one-line briefing,' indicating appropriate use. It does not explicitly mention alternatives or when not to use, but the context of siblings provides implicit guidance. A clear usage context is provided.

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. Dates show when Glama detected each change.

  1. 4 tool updatesv1.0.0
    • First observedget_cheapest_hours
    • First observedget_current_price
    • First observedget_price_summary
    • First observedget_prices

TDQS

A4.3/5.0
Disambiguation5/5

Each tool targets a distinct query: current price, all prices per date/area, cheapest hours, and a summary. No overlap.

Naming Consistency5/5

All tools follow a consistent 'get_*' pattern with descriptive nouns, all in snake_case.

Tool Count5/5

4 tools is well-scoped for a focused electricity price server, covering all typical queries without unnecessary redundancy.

Completeness4/5

Covers current, daily, cheapest, and summary queries. Missing historical multi-day comparison, but core functionality is complete.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    MCP Server for Tibber, a Norwegian power supplier. The Tibber MCP server provides an AI agent with a convenient way to interact with the Tibber API and query information such as current energy prices and your energy consumption data.
    2
    3
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Provides access to Danish energy data from Energinet, including real-time electricity spot prices, CO2 emissions, and production mix. It enables users to monitor grid status and identify the most cost-effective hours for energy-intensive tasks.
    4
    15
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    MCP server for the Australian Energy Market Operator (AEMO) National Electricity Market. Plain-English access to 5-min dispatch prices, regional demand, interconnector flows, generation by fuel, rooftop PV.
    5
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    MCP server for real-time electricity prices, carbon intensity, and energy analytics across 41+ zones in Europe, Great Britain, the United States, and Australia. Query live prices, compare zones, check gas storage levels, get green scores, find optimal charging windows, and access advanced analytics. Free Basic tier requires no API key. Install via npx gridpulse-mcp or connect directly via Streamab
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kimhjort/aria-mcp-elpriser'

If you have feedback or need assistance with the MCP directory API, please join our Discord server