Skip to main content
Glama
UliRCS

mastr-mcp-server

by UliRCS

MaStR MCP Server

An MCP server for the Marktstammdatenregister (MaStR) — the German energy market master data register operated by the Bundesnetzagentur (Federal Network Agency). Enables Claude Desktop, Cowork, and Claude Code to directly access the German energy plant registry.

Deutsche Version / German version

Features

21 Tools — 14 SOAP (with credentials), 7 Public (always available)

Tool

API

Auth

Description

get_unit

SOAP

Yes

Full unit details + EEG + CHP + permit + storage in one call

search_power_generation_soap

SOAP

Yes

Filtered search for power generation (all 20 energy carriers, postcode, capacity)

get_actor

SOAP

Yes

Market actor details by MaStR number

get_api_quota

SOAP

Yes

Daily API quota (used / limit)

get_recent_changes

SOAP

Yes

Delta sync: changes since date (EEG, CHP, permit, location, storage)

search_power_consumption_soap

SOAP

Yes

Filtered search for power consumers (postcode, state, status, etc.)

search_gas_production_soap

SOAP

Yes

Filtered search for gas production (capacity, postcode, etc.)

search_gas_consumption_soap

SOAP

Yes

Filtered search for gas consumers (capacity, postcode, etc.)

search_actors_soap

SOAP

Yes

Filtered search for market actors (function, role, postcode, etc.)

get_location

SOAP

Yes

Location details incl. linked units + grid connection points

get_catalog_values

SOAP

Yes

Catalog/enum values (legal form, manufacturer, etc.) by category ID

get_catalog_categories

SOAP

Yes

List all available catalog categories

get_balancing_areas

SOAP

Yes

Balancing areas (Y-EIC codes, control areas), optionally by DSO

get_grid_connection

SOAP

Yes

Grid connection points for a unit (voltage level, location, co-located units)

search_power_generation_public

JSON

No

Power generation units (27 filter keys)

search_actors_public

JSON

No

Market actors (23 filter keys)

search_power_consumption_public

JSON

No

Power consumption units (29 filter keys)

search_gas_production_public

JSON

No

Gas production / gas storage (30 filter keys)

search_gas_consumption_public

JSON

No

Gas consumption units (30 filter keys)

search_grid_connections_public

JSON

No

Grid connection points & locations (4 types, 12-20 filter keys)

get_local_time

SOAP

No

Connection test (always available)

10 Filter Operators

Suffix

Operator

Description

(none) / =

eq

Equal (default)

!=

neq

Not equal

%

ct

Contains

!%

nct

Does not contain

:

sw

Starts with

$

ew

Ends with

>

gt

Greater than

<

lt

Less than

?

null

Is NULL

! / !?

nn

Is NOT NULL

20 Energy Carriers

All technology keywords are available in English (German aliases also work):

wind, solar, biomass, hydro, storage, geo, mine_gas, sewage_sludge, solar_thermal, pressure_relief_gas/pressure_relief_water, natural_gas, hard_coal, lignite, mineral_oil, other_gases, waste, heat, hydrogen, nuclear.

Without credentials, 7 public tools are available (search power generation, power consumption, gas production, gas consumption, market actors, grid connections + connection test). With credentials (.env), 14 additional SOAP tools are registered (detail queries, filtered searches, catalogs, balancing areas, etc.).

Related MCP server: strompreis-mcp

Installation

Prerequisites

Step 1: Clone / copy project

git clone https://github.com/UliRCS/mastr-mcp-server.git
cd mastr-mcp-server

Step 2: Install dependencies

With uv (recommended):

uv sync

With pip:

pip install -e .

Step 3: Store credentials in .env

The server automatically loads credentials from a .env file in the project directory (via python-dotenv). This is the recommended approach.

cp .env.example .env
# Edit .env and fill in your values:
# MASTR_USER=SEM123456789012
# MASTR_TOKEN=your-webservice-token-540-chars

.env is excluded via .gitignore — your token will not end up in the repo.

Alternative: You can also set the variables as OS environment variables or in the env block of the Claude Desktop config — OS values take precedence.

Step 4: Test

# Quick test
uv run mastr_mcp_server.py

# Or with the MCP Inspector
npx @modelcontextprotocol/inspector uv run mastr_mcp_server.py

Configuration for Claude Desktop / Cowork

Open the Claude Desktop configuration file:

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

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

If .env is in the project directory, you can omit the env block:

{
  "mcpServers": {
    "mastr": {
      "command": "uv",
      "args": [
        "run",
        "--directory", "/path/to/mastr-mcp-server",
        "mastr_mcp_server.py"
      ]
    }
  }
}

Important: Adjust the path under --directory to the actual location on your system.

Configuration for Claude Code

claude mcp add mastr \
  --command "uv" \
  --args "run" "--directory" "/path/to/mastr-mcp-server" "mastr_mcp_server.py" \
  --env "MASTR_USER=SOM123456789012" \
  --env "MASTR_TOKEN=your-webservice-token"

Usage Examples

  • "Show me the details of wind turbine SEE966095906064" -> get_unit

  • "Find all solar plants in postcode 49074" -> search_power_generation_public({'tech': 'solar', 'postcode': '49074'})

  • "Wind turbines between 1200 and 3500 kW in postcode area 23..." -> search_power_generation_public({'tech': 'wind', 'capacity>': 1200, 'capacity<': 3500, 'postcode:': '23'})

  • "Wind turbines WITHOUT EEG key" -> search_power_generation_public({'tech': 'wind', 'eeg_key?': ''})

  • "All non-wind units in postcode 49074" -> search_power_generation_public({'tech!=': '2497', 'postcode': '49074'})

  • "Power-to-Gas hydrogen plants" -> search_gas_production_public({'gas_technology': 'Power-to-Gas (Wasserstoff)'})

  • "High-voltage consumers in Bavaria" -> search_power_consumption_public({'bundesland': 'Bayern', 'voltage_level': 'Hochspannung'})

  • "Gas consumers with H-Gas that generate electricity" -> search_gas_consumption_public({'gas_quality': 'H-Gas', 'gas_for_power': True})

  • "DSOs with more than 100,000 connected customers in Lower Saxony" -> search_actors_public({'function': 'Stromnetzbetreiber', 'dso_large': True, 'bundesland': 'Niedersachsen'})

  • "Grid connection points for power generation in postcode 49074 at medium voltage" -> search_grid_connections_public('power_generation', {'postcode': '49074', 'voltage_level': 'Mittelspannung'})

  • "Gas feed-in points with H-Gas" -> search_grid_connections_public('gas_production', {'gas_quality': 'H-Gas'})

Project Structure

mastr-mcp-server/
├── mastr_mcp_server.py           # Entry point (imports package, starts server)
├── mastr_mcp/                     # Main package
│   ├── __init__.py               # Package init, conditional tool registration
│   ├── config.py                 # Constants, env vars, technology mappings
│   ├── serialization.py          # SOAP->JSON, MS-AJAX date conversion
│   ├── client.py                 # SOAP client, HTTP fetch, retry helper
│   ├── filters.py                # Filter builder, column mappings, dropdown loading
│   ├── server.py                 # FastMCP instance with instructions
│   ├── tools_soap.py             # SOAP tools (14)
│   ├── tools_public.py           # Public JSON tools (7)
│   └── resources.py              # MCP Resources (4)
├── *_dropdowns.json               # Dropdown ID mappings (5 files, from live API)
├── pyproject.toml                 # Dependencies and metadata
├── .env                           # Credentials (not in git)
└── .env.example                  # Credential template

Security Notes

  • The MaStR token is confidential — it belongs in .env, never in the repo.

  • The server only performs read operations (no registrations or modifications)

  • Daily limit: 100,000 SOAP API calls per user (public JSON is unlimited)

  • Only TLS 1.2 connections are accepted

License

MIT

Available Tools

7 tools
get_local_timeA

Connection test — returns current server time if MaStR SOAP service is reachable.

No authentication required. Use this to verify network connectivity.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Describes the tool as a test returning server time with no authentication, which sufficiently discloses its behavior given its simplicity.

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-loaded with purpose, no wasted words.

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 test tool with no parameters and no output schema, the description is fully adequate.

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?

No parameters exist, and description adds nothing beyond schema, but baseline of 4 is appropriate for zero-parameter tools.

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 it is a connection test that returns server time, distinguishing it from sibling search 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?

Explicitly says 'Use this to verify network connectivity' and notes no authentication required, providing clear context for use.

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

search_actors_publicA

Search market actors (Marktakteure) — no auth required.

Find energy market participants: DSOs (Netzbetreiber), generators, suppliers, traders, and more. 23 filter keys for name, function, role, location, status, and DSO flags (large DSO, closed distribution network).

NOTE: MaStR stores '&' as fullwidth U+FF06 in company names. Use 'name%' with a substring without '&' for reliable company name searches.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number.
filtersYesFilter dict with optional operator suffixes on each key. Operators: '=' (eq, default), '!=' (neq), '%' (contains), '!%' (not contains), ':' (starts with), '$' (ends with), '>' (gt), '<' (lt), '?' (is null), '!' or '!?' (is not null). Supported filter keys: name, mastr_number, bnetza_number, acer_code, vat_id, register_court, register_number, function, roles, industry_group, postcode, city, street, bundesland, nuts_region, status, registration_date, last_update, activity_start, activity_end, dso_large, dso_closed, sme_flag. Dropdown fields (bundesland, function, status, roles, nuts_region, industry_group) accept label or MaStR ID. Boolean fields (dso_large, dso_closed, sme_flag) accept true/false, ja/nein, 1/0. NOTE: MaStR stores '&' as fullwidth U+FF06 — use 'name%' with a substring without '&' for company name searches. Example: {'function': 'Stromnetzbetreiber', 'dso_large': True}
page_sizeNoPage size (max 5000).

TDQS

A3.9/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 the full burden. It states 'no auth required', mentions 23 filter keys, and notes the special handling of '&' characters. However, it does not disclose pagination behavior, rate limits, or error responses, leaving some gaps.

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 and well-structured. It front-loads the purpose, uses bold for emphasis, and employs a clear note format. Every sentence adds necessary information without redundancy.

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 the lack of an output schema, the description does not explain return values. It mentions 23 filter keys but not their full meaning (schema does). Pagination limits are partially covered. For a public search tool, more detail on response structure would improve completeness.

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%, so the schema documents all parameters. The description adds value by explaining the operator suffixes for filters, dropdown field acceptance of labels/IDs, boolean field formats, and a notable tip about searching with '&' in company names. This goes 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 searches for market actors (Marktakteure) and lists examples like DSOs, generators, suppliers. It distinguishes from sibling tools that search other specific domains (power generation, consumption, gas, etc.).

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 finding energy market participants but does not explicitly compare to siblings or provide when-not-to-use scenarios. The context of sibling tool names gives some guidance, but the description itself lacks direct usage guidance.

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

search_gas_consumption_publicA

Search gas consumption units (Gasverbrauch) — no auth required.

Find registered gas consumers. 30 filter keys covering identification, location, dates, gas quality (H-Gas/L-Gas), maximum capacity, and whether the gas is used for power generation (gas_for_power flag).

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number.
filtersYesFilter dict with optional operator suffixes on each key. Operators: '=' (eq, default), '!=' (neq), '%' (contains), '!%' (not contains), ':' (starts with), '$' (ends with), '>' (gt), '<' (lt), '?' (is null), '!' or '!?' (is not null). Supported filter keys: name, mastr_number, mastr_operator, location_mastr, dso_mastr, operator_name, dso_name, postcode, city, landkreis, street, bundesland, municipality, municipality_key, landmark, parcel, country, longitude, latitude, status, commission_date, current_location_date, shutdown_date, planned_date, registration_date, last_update, max_gas_capacity, gas_quality, gas_for_power, dso_check. Dropdown fields (status, bundesland, country, gas_quality, dso_check) accept label or MaStR ID. gas_quality values: 'H-Gas', 'L-Gas'. gas_for_power is a boolean (true/false, ja/nein). Example: {'gas_quality': 'H-Gas', 'gas_for_power': True}
page_sizeNoPage size (max 5000).

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations provided, the description discloses 'no auth required' and that it searches gas consumers, but it omits behavioral traits such as pagination, return format, or idempotency. It does not specify whether the tool is read-only or describe any side effects.

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 with three sentences: a bold statement of purpose, a short clarifying line, and a list of filter categories. It is front-loaded with key information and contains no unnecessary 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 the complexity of the tool (3 parameters, nested filters, no output schema), the description lacks information about what the search returns (e.g., fields of results), pagination details beyond what the schema provides, and usage boundaries. It covers the core purpose and filter categories but is not fully 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?

Schema description coverage is 100%, so the schema already documents parameters thoroughly. The description adds some context by highlighting filter categories and giving examples, but it does not significantly augment the schema's parameter 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 tool searches for gas consumption units (Gasverbrauch) with 'Search' as the verb and specifies the resource as 'gas consumption units' (gas consumers). It distinguishes itself from siblings like search_power_consumption_public and search_gas_production_public by explicitly targeting gas consumption.

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 indicates the tool requires no authentication and is for finding registered gas consumers, which implies its appropriate context. However, it does not provide explicit when-to-use or when-not-to-use guidance or mention alternative tools.

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

search_gas_production_publicA

Search gas production and storage units (Gaserzeugung) — no auth required.

Find biogas plants, Power-to-Gas (hydrogen/methane), LNG terminals, fossil gas producers, and gas storage units. 30 filter keys including gas technology and unit type (producer vs. storage).

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number.
filtersYesFilter dict with optional operator suffixes on each key. Operators: '=' (eq, default), '!=' (neq), '%' (contains), '!%' (not contains), ':' (starts with), '$' (ends with), '>' (gt), '<' (lt), '?' (is null), '!' or '!?' (is not null). Supported filter keys: name, mastr_number, mastr_operator, location_mastr, dso_mastr, operator_name, dso_name, postcode, city, landkreis, street, bundesland, municipality, municipality_key, landmark, parcel, country, longitude, latitude, status, commission_date, current_location_date, shutdown_date, planned_date, registration_date, last_update, gas_production_capacity, gas_technology, unit_type, dso_check. Dropdown fields (status, bundesland, country, gas_technology, unit_type, dso_check) accept label or MaStR ID. gas_technology values: 'Biomethan-Erzeugung', 'Förderung fossilen Erdgases', 'Liquefied Natural Gas', 'Power-to-Gas (Methan)', 'Power-to-Gas (Wasserstoff)'. unit_type values: 'Gaserzeugungseinheit', 'Gasspeichereinheit'. Example: {'gas_technology': 'Power-to-Gas (Wasserstoff)', 'status': 'In Betrieb'}
page_sizeNoPage size (max 5000).

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description covers key behavioral aspects: it is a read-only public search (no auth), details filter operators and dropdown fields, and provides an example. It does not mention rate limits or pagination behavior beyond default page size, but these are less critical for search.

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 efficient: two short paragraphs, bolded key phrase, and bullet-like listing. Every sentence adds value without redundancy, making it easy to scan.

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 no output schema and nested objects. The description focuses on input parameters and search scope but does not explain return fields or structure. For a search tool, this is adequate but could mention typical response fields (e.g., unit details, capacity).

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

Parameters5/5

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

The schema has 100% description coverage with each parameter documented. The description adds significant value by listing filter key categories (gas technology, unit type) and explaining operators, dropdown values, and an example, greatly enhancing 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 it searches gas production and storage units (Gaserzeugung), listing specific types like biogas, Power-to-Gas, LNG, fossil gas, and storage, and explicitly says no auth required. It distinguishes from sibling tools like search_power_generation_public by targeting gas-specific entities.

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 indicates it is for public data (no auth) and lists the types of units, implying use for gas-related searches. However, it does not explicitly state when not to use it or provide direct comparisons to siblings, but the context from sibling names (power, actors, consumption) gives guidance.

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

search_grid_connections_publicA

Search grid connection points and locations (Netzanschlusspunkte) — no auth required.

Find where units connect to the grid. Returns location data, grid connection points, linked units, DSO info, and network parameters. Supports 4 connection types: power generation/consumption and gas production/consumption. Power types include voltage level, control area, and balancing area. Gas types include gas quality and market area.

For grid connection details of a specific unit, use get_grid_connection (SOAP).

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number.
filtersYesFilter dict with optional operator suffixes on each key. Operators: '=' (eq, default), '!=' (neq), '%' (contains), '!%' (not contains), ':' (starts with), '$' (ends with), '>' (gt), '<' (lt), '?' (is null), '!' or '!?' (is not null). Shared filter keys (all 4 types): location_mastr, location_name, nap_mastr, nap_name, dso_mastr, dso_name, unit_mastr, postcode, city, municipality, municipality_key, capacity, planned. Power (Strom) types add: voltage_level, voltage_level_id, control_area, control_area_id, balancing_area, metering_location. power_generation also has: unit_types. Gas types add: gas_quality, gas_quality_id, market_area, market_area_id. planned is a boolean (true/false). Dropdown fields accept both label and numeric ID (e.g. voltage_level='Mittelspannung' or voltage_level_id='352'). Example: {'postcode': '49074', 'voltage_level': 'Mittelspannung'}
page_sizeNoPage size (max 5000).
connection_typeYesType of grid connection. One of: 'power_generation' (Stromerzeugung), 'power_consumption' (Stromverbrauch), 'gas_production' (Gaserzeugung), 'gas_consumption' (Gasverbrauch).

TDQS

A4.2/5.0
Behavior3/5

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

No annotations provided. Description discloses 'no auth required', return data types, and supported connection types. However, misses details on rate limits, pagination behavior, error handling, or response structure.

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?

Description is well-structured with bolded main point, clear paragraphs for returns and types, and efficient one-sentence alternative guidance. No unnecessary 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?

Given no output schema, description adequately covers return data types and connection types. Could improve by detailing output structure or field examples, but overall sufficient.

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%, baseline 3. Description adds significant value beyond schema by explaining filter operators, shared vs type-specific keys, boolean 'planned', and dropdown field format (label/ID).

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 clearly states it searches grid connection points and locations, using specific verb 'Search' and resource 'grid connection points and locations'. It distinguishes from sibling tool get_grid_connection for specific unit 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?

Provides explicit alternative tool (get_grid_connection) for specific unit details. Does not directly compare with sibling search tools like search_power_generation_public, but implies this tool is for connection points across all types.

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

search_power_consumption_publicA

Search power consumption units (Stromverbrauch) — no auth required.

Find large electricity consumers registered in MaStR. 29 filter keys covering identification, location, dates, voltage level, and DSO checks.

Use this when searching for electricity consumers (not generators).

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number.
filtersYesFilter dict with optional operator suffixes on each key. Operators: '=' (eq, default), '!=' (neq), '%' (contains), '!%' (not contains), ':' (starts with), '$' (ends with), '>' (gt), '<' (lt), '?' (is null), '!' or '!?' (is not null). Supported filter keys: name, mastr_number, mastr_operator, location_mastr, dso_mastr, operator_name, dso_name, postcode, city, landkreis, street, bundesland, municipality, municipality_key, landmark, parcel, country, longitude, latitude, status, commission_date, current_location_date, shutdown_date, planned_date, registration_date, last_update, large_consumers, voltage_level, dso_check. Dropdown fields (status, bundesland, country, voltage_level, dso_check) accept label or MaStR ID. Example: {'bundesland': 'Bayern', 'voltage_level': 'Hochspannung'}
page_sizeNoPage size (max 5000).

TDQS

A4.6/5.0
Behavior4/5

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

The description discloses that no authentication is required, that it finds large consumers in MaStR, and lists 29 filter keys across categories. Since no annotations are provided, the description carries full burden and does well, though it could mention return format or data freshness.

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 with three short paragraphs: purpose/auth, details, usage guidance. Information is front-loaded and 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 no output schema, the description could mention what the response contains. It does state it finds large consumers, but lacks specifics. Otherwise, it covers all input parameters and usage context well.

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%, baseline 3. The description adds value by explaining filter operator suffixes, listing all filter keys, and providing an example. This goes beyond the schema descriptions, which are brief.

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 it searches for power consumption units (electricity consumers) and distinguishes from generators. It specifies the resource type and verb, and the context signals include a sibling tool for generation, making the purpose unambiguous.

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

Usage Guidelines5/5

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

The description explicitly says 'Use this when searching for electricity consumers (not generators),' providing a clear directive and pointing to the sibling tool for generation. This is excellent guidance.

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

search_power_generation_publicA

Search power generation units (Stromerzeugung) — no auth required.

The primary tool for finding wind turbines, solar panels, biomass plants, hydro, storage, gas turbines, nuclear plants, etc. in the MaStR register. Supports all 20 energy carriers with 27 filter keys and 10 operators.

Use this as the default search tool for power generation questions. For full unit details after finding a MaStR number, use get_unit (SOAP).

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number.
filtersYesFilter dict with optional operator suffixes on each key. Operators: '=' (eq, default), '!=' (neq), '%' (contains), '!%' (not contains), ':' (starts with), '$' (ends with), '>' (gt), '<' (lt), '?' (is null), '!' or '!?' (is not null). Supported filter keys: tech, name, eeg_key, mastr_number, mastr_operator, capacity, capacity_netto, postcode, city, landkreis, street, bundesland, longitude, latitude, status, commission_date, eeg_commission_date, operator_name, wind_park, wind_manufacturer, hub_height, rotor_diameter, solar_park, storage_capacity, storage_mastr_number, storage_technology, battery_technology. tech shortcuts: 'wind', 'solar'/'pv', 'biomass', 'hydro', 'storage', 'geo', 'natural_gas', 'nuclear', 'hydrogen', etc. German aliases also work (erdgas, kernkraft, wasserstoff, etc.). Dropdown fields (bundesland, status, wind_manufacturer, storage_technology, battery_technology) accept label or MaStR ID. Example: {'tech': 'wind', 'bundesland': 'Niedersachsen', 'capacity>': 3000, 'eeg_key!?': ''}
page_sizeNoPage size (max 5000).

TDQS

A4.2/5.0
Behavior3/5

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

The description states 'no auth required' and implies a read-only search, but with no annotations, the burden is on the description. It does not explicitly declare read-only, rate limits, or other behavioral traits beyond auth. Adequate but could be more transparent.

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 (around 100 words), well-structured with bullet points, and front-loads the purpose. 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.

Completeness4/5

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

For a complex search tool with many filter keys and operators, the description covers the essentials: filter syntax, supported keys, tech shortcuts, and dropdown fields. No output schema is provided, but the tool is a search that likely returns a list of units; the description is adequate.

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%, but the description adds significant value: it explains filter operators, provides examples, lists tech shortcuts, and mentions German aliases and dropdown field behavior. This goes beyond the schema descriptions.

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 'Search power generation units' and lists specific energy carriers (wind, solar, biomass, etc.), distinguishing it from sibling search tools (e.g., search_actors_public). The verb 'search' and resource 'power generation units' are explicit.

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 advises 'Use this as the default search tool for power generation questions' and directs users to get_unit for full details after finding a MaStR number. It provides clear context but does not explicitly exclude other search tools for power generation.

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. 7 tool updatesv1.0.1
    • First observedget_local_time
    • First observedsearch_actors_public
    • First observedsearch_gas_consumption_public
    • First observedsearch_gas_production_public
    • First observedsearch_grid_connections_public
    • First observedsearch_power_consumption_public
    • First observedsearch_power_generation_public

TDQS

A4.2/5.0

Scored across 7 tools

Disambiguation5/5

Each tool targets a distinct entity type (power generation, actors, consumption, gas production, gas consumption, grid connections) and the connection test. No overlap in purpose; descriptions clearly differentiate them.

Naming Consistency4/5

All search tools follow a consistent 'search_{domain}_public' pattern. The lone 'get_local_time' breaks the pattern but serves a distinct health-check purpose, so the deviation is minor and acceptable.

Tool Count5/5

With 7 tools, the set covers the major queryable entities in MaStR without being excessive. Each tool serves a clear role, and the count is appropriate for the server's scope.

Completeness3/5

The tools cover searching for all main entity types, but lack retrieval of full details (e.g., get_unit, get_grid_connection) after search, requiring external SOAP calls. This is a notable gap for a complete workflow.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    One-call Australian energy-market plumbing via AEMO — cited, structured responses for market data and analysis, not a data broker.
    5
    140 PyPI
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server for querying ENTSO-E Transparency Platform data including actual load, generation per type, cross-border flows, and installed capacity.
    1 npm
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    MCP server for Swiss electricity data from three official sources — production mix, consumption forecast, storage-lake fill, consumer price index, tariffs per municipality, and dataset discovery. Zero authentication.
    12
    19 PyPI
    MIT