Skip to main content
Glama
x2q

elpriser-mcp

by x2q

elpriser-mcp

MCP server for Danish electricity prices — current spot price, cheapest hours, and a 7-day forecast for DK1 and DK2, straight from elpriser.org.

A Model Context Protocol server that lets an LLM (Claude Desktop, etc.) answer questions like:

  • "Hvad er elprisen lige nu?" / "What does electricity cost right now in Denmark?"

  • "Hvornår er strøm billigst i morgen?" — find the cheapest hours to charge the EV / run the heat pump

  • "Vis elpriser i dag time for time for DK2"

  • "Hvordan ser elprisprognosen ud de næste 7 dage?"

Data comes from the free, public elpriser.org API, which is sourced from Energi Data Service (Energinet) / Nord Pool. Prices can be the raw spot price or the total price you actually pay per kWh (incl. system & transmission tariffs, electricity tax and 25% VAT). No API key required.

Tools

Tool

What it does

get_current_price

Current price for this hour (DK1/DK2)

get_today_prices

All 24 hourly prices for a date

get_cheapest_hours

The N cheapest hours of the day (EV/heat-pump scheduling)

get_price_forecast

7-day forecast (actual for today/tomorrow, estimate beyond)

find_net_company

Net company (netselskab) for a lat/lng — for exact total price

All tools take an area (DK1 or DK2, default DK1) and most take a mode:

  • spot_ex — raw spot price, no VAT

  • spot_inkl — spot price incl. 25% VAT

  • inkl_alt (default) — total price incl. all tariffs + electricity tax + VAT

  • inkl_alt_minus — total without electricity tax

Related MCP server: aria-mcp-elpriser

Install

Requires Node.js ≥ 18.

Claude Desktop

Add to your claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/claude_desktop_config.json, Windows: %APPDATA%\Claude\claude_desktop_config.json):

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

Restart Claude Desktop. You should see the elpriser tools available.

Any other MCP client

Run the server over stdio:

npx -y elpriser-mcp

Or install globally:

npm install -g elpriser-mcp
elpriser-mcp

Examples

You: Hvornår er strøm billigst i morgen i DK1?

Claude (calls get_cheapest_hours area=DK1 hours=5 date=…): De billigste timer i morgen er 02–05 og 13–14 …

Configuration

Env var

Default

Purpose

ELPRISER_API_BASE

https://elpriser.org

Override the API base (e.g. for testing).

How it works

elpriser-mcp is a thin wrapper over the public elpriser.org REST API (/api/now, /api/prices, /api/schedule, /api/forecast, /api/supplierlookup). The full OpenAPI 3.1 spec lives at https://elpriser.org/api/openapi.json and human docs at https://elpriser.org/api.

License

MIT © elpriser.org


Built and maintained alongside elpriser.org — aktuelle elpriser og spotpriser time for time for hele Danmark.

Available Tools

5 tools
find_net_companyA

Look up the Danish net company (netselskab) for a location by latitude/longitude — needed to compute the exact total price for an address. Use for "hvilket netselskab har jeg".

ParametersJSON Schema
NameRequiredDescriptionDefault
latYesLatitude (WGS84).
lngYesLongitude (WGS84).

TDQS

A3.8/5.0
Behavior2/5

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

No annotations provided. The description mentions it's a lookup operation but does not disclose whether it's read-only, what side effects exist, or what the output format is. This is insufficient for behavioral transparency.

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 a single concise sentence plus a usage hint, with no unnecessary words or redundancy. It is well-structured and front-loaded with the core purpose.

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 tool with 2 parameters and no output schema, the description covers the purpose and usage. Lacks return value information, but given simplicity, it is nearly complete.

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?

Input schema provides clear descriptions for lat and lng (WGS84). The description adds context about locality but not additional parameter meaning. Schema coverage is 100%, so baseline 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 clearly states the tool's function: lookup a Danish net company by latitude/longitude. It provides context ('needed to compute the exact total price for an address') and includes a Danish query phrase, effectively distinguishing it from sibling price-related tools.

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 specific use case and query example ('Use for "hvilket netselskab har jeg"'). It implicitly guides usage, but does not explicitly mention when not to use or provide alternatives, though sibling tools are clearly unrelated.

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

get_cheapest_hoursA

Find the N cheapest hours of the day for a price zone — for scheduling EV charging, heat pump, dishwasher etc. Use for "hvornår er strøm billigst i dag/i morgen".

ParametersJSON Schema
NameRequiredDescriptionDefault
areaNoDanish price zone: DK1 = Vestdanmark (Jylland og Fyn), DK2 = Østdanmark (Sjælland, Lolland-Falster, Bornholm).DK1
modeNoPrice view: spot_ex = raw spot price (no VAT); spot_inkl = spot incl. 25% VAT; inkl_alt = total price incl. system/transmission tariffs + electricity tax + VAT (what you actually pay); inkl_alt_minus = total without electricity tax.inkl_alt
hoursNoHow many cheapest hours to return.
dateNoDate as YYYY-MM-DD. Defaults to today.

TDQS

A3.6/5.0
Behavior2/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 only describes the tool's function without disclosing any behavioral traits (e.g., data source, latency, error handling, or whether it's a read operation). A read operation is implied but not confirmed.

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

Conciseness4/5

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

The description is concise with two sentences, front-loading the purpose. It is efficient and avoids excess text, though it could be slightly expanded for completeness.

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?

The description explains what the tool does but not the output format or how results are returned. Given no output schema, this is a gap. However, the tool's simplicity and clear parameters partially compensate.

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%, so the schema already documents all parameters. The description does not add any parameter-specific meaning beyond what the schema provides, maintaining a baseline of 3.

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 finds the N cheapest hours of the day for a price zone, with concrete use cases like scheduling EV charging. It distinguishes from siblings (e.g., get_current_price, get_price_forecast) 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?

Provides clear context on when to use (scheduling appliances) and includes a natural language query example in Danish. Does not explicitly exclude cases or mention alternatives, but the context is sufficient.

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

get_current_priceA

Get the current Danish electricity price (this hour) for a price zone. Use for "hvad er elprisen lige nu / hvad koster strøm nu".

ParametersJSON Schema
NameRequiredDescriptionDefault
areaNoDanish price zone: DK1 = Vestdanmark (Jylland og Fyn), DK2 = Østdanmark (Sjælland, Lolland-Falster, Bornholm).DK1
modeNoPrice view: spot_ex = raw spot price (no VAT); spot_inkl = spot incl. 25% VAT; inkl_alt = total price incl. system/transmission tariffs + electricity tax + VAT (what you actually pay); inkl_alt_minus = total without electricity tax.inkl_alt

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose behavioral traits. It only states the tool's purpose, with no information about read-only nature, side effects, rate limits, or data freshness. For a simple query tool, this is insufficient.

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, consisting of two short sentences that efficiently convey purpose and usage context. Every word adds value.

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 tool with no output schema and no annotations, the description is adequate but lacks details like data source or refresh rate. It is complete enough given the low complexity, but could be slightly improved.

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 input schema has 100% description coverage for both parameters (area and mode) with detailed enum descriptions. The tool description adds no additional meaning beyond the schema, so baseline score 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 gets the current Danish electricity price for a price zone, using a specific verb and resource. It includes a usage example in Danish, and implicitly distinguishes from sibling tools like 'get_price_forecast' or 'get_today_prices' by focusing on the current hour.

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 explicitly says 'Use for ...' with example user queries, indicating when to use. However, it does not provide when-not-to-use or mention alternatives, though sibling tools cover other temporal queries.

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

get_price_forecastA

Get a 7-day electricity price forecast for a price zone (actual day-ahead prices for today/tomorrow, weather-corrected estimate beyond). Use for "elpriser de næste dage / prognose".

ParametersJSON Schema
NameRequiredDescriptionDefault
areaNoDanish price zone: DK1 = Vestdanmark (Jylland og Fyn), DK2 = Østdanmark (Sjælland, Lolland-Falster, Bornholm).DK1
modeNoPrice view: spot_ex = raw spot price (no VAT); spot_inkl = spot incl. 25% VAT; inkl_alt = total price incl. system/transmission tariffs + electricity tax + VAT (what you actually pay); inkl_alt_minus = total without electricity tax.inkl_alt

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 the time horizon (7 days) and the data source distinction (actual vs estimate). However, it does not mention the return format, potential error conditions, or any other behavioral traits like rate limits. Adequate but not comprehensive.

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 front-load the key information: the tool's capability and a usage hint. Every word earns its place; no fluff. Excellent conciseness.

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 tool has no output schema and moderate complexity (2 params, 7-day forecast), the description is fairly complete: it explains the time range, data source distinction, and provides a usage hint. It does not describe the output format, which would improve completeness, but the essential context is conveyed.

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 detailed descriptions for both parameters (enum values explained). The description adds minimal extra context (price zone and mode meanings are already covered in schema). Baseline 3 is appropriate as the description does not significantly enhance parameter understanding 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 clearly states the tool gets a 7-day electricity price forecast for a price zone. It distinguishes between actual day-ahead prices and weather-corrected estimates, and provides a concrete use case in Danish. The purpose is specific and differentiates from sibling tools like get_current_price or get_today_prices.

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 includes a usage hint ('Use for elpriser de næste dage / prognose') which indicates when to apply it. It does not explicitly mention when not to use it or compare to alternatives, but the context of siblings and the forecast nature provides implicit guidance. Close to a 5 but lacks explicit exclusions.

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

get_today_pricesA

Get all 24 hourly electricity prices for a given date (default: today) in a price zone. Use for "elpriser i dag / time for time".

ParametersJSON Schema
NameRequiredDescriptionDefault
areaNoDanish price zone: DK1 = Vestdanmark (Jylland og Fyn), DK2 = Østdanmark (Sjælland, Lolland-Falster, Bornholm).DK1
modeNoPrice view: spot_ex = raw spot price (no VAT); spot_inkl = spot incl. 25% VAT; inkl_alt = total price incl. system/transmission tariffs + electricity tax + VAT (what you actually pay); inkl_alt_minus = total without electricity tax.inkl_alt
dateNoDate as YYYY-MM-DD. Defaults to today (Danish local time).

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description must fully disclose behavior. It states the tool returns 'all 24 hourly electricity prices', but lacks details such as whether prices are in order, the unit (e.g., DKK/kWh), or any timezone considerations. No mention of data source, update frequency, or potential delays.

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 at two sentences. The first sentence states the core functionality and defaults, and the second provides a usage hint. There is no unnecessary text, and every word contributes meaning.

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?

The tool has 3 parameters with no output schema, so the description should partially compensate. It mentions 'all 24 hourly electricity prices' but does not specify the structure (e.g., list of objects with hour and price) or any units. This is adequate but leaves room for improvement.

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 the baseline is 3. The description does not add any extra meaning beyond what the schema already provides for each parameter (area, mode, date). The enums and defaults are well-documented in the schema, so the description offers no additional 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 clearly states the tool gets all 24 hourly electricity prices for a given date in a price zone, and includes a specific use case hint: 'elpriser i dag / time for time'. This distinguishes it from sibling tools like get_current_price (single current price) and get_price_forecast (forecast).

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 explicit context with 'Use for "elpriser i dag / time for time"', indicating when to use it. However, it does not explicitly exclude other scenarios or mention alternatives like get_cheapest_hours, which could be used for filtering. The sibling names help but are not referenced.

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

TDQS

A3.9/5.0
Disambiguation5/5

Each tool targets a distinct aspect of electricity pricing: net company lookup, cheapest hours, current price, forecast, and hourly prices. No overlap or ambiguity.

Naming Consistency4/5

Most tools use the 'get_' prefix (get_cheapest_hours, get_current_price, get_price_forecast, get_today_prices), but one tool uses 'find_' (find_net_company), introducing a minor inconsistency.

Tool Count5/5

Five tools cover the core needs of Danish electricity price queries without being excessive or insufficient. The count is well-scoped for the domain.

Completeness4/5

The set covers current price, daily/hourly prices, cheapest hours, forecast, and net company lookup. Missing historical price retrieval, but the essential workflows are supported.

Maintenance

ActivityInactive
ResponsivenessNo issues

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
    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
    C
    maintenance
    MCP server for fetching Danish electricity spot prices (DK1/DK2) using the free elprisenligenu.dk API, providing tools to get current price, cheapest hours, and price summaries.
    4
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    A read-only MCP server that exposes European day-ahead electricity prices for ~41 bidding zones via tools like hourly prices, cheapest hours, current price, and cross-zone summary, enabling AI agents to query energy market data.
    1

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/x2q/elpriser-mcp'

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