Skip to main content
Glama
malkreide

swiss-energy-mcp

by malkreide

🇨🇭 Part of the Swiss Public Data MCP Portfolio

⚡ swiss-energy-mcp

Version License: MIT Python 3.11+ MCP Data Source Tests CI

MCP server for Swiss energy data from the Federal Office of Energy (SFOE/BFE) via GeoAdmin REST API and opendata.swiss — no API key required.

🇩🇪 Deutsche Version


Overview

swiss-energy-mcp gives AI assistants structured, location-based access to Switzerland's energy infrastructure. Built on open geodata from the Swiss Federal Office of Energy (SFOE/BFE) via the GeoAdmin REST API and the opendata.swiss catalogue — completely authentication-free.

The server is part of a growing portfolio of Swiss open data MCP servers. Think of it as the energy atlas counterpart to swiss-road-mobility-mcp: while the latter maps mobility, this server maps where Switzerland produces electricity, where solar potential exists, and which municipalities hold the "Energiestadt" label.

Anchor demo query: "Which power plants are within 20 km of the school in Wädenswil — and is the municipality an Energiestadt?"


Related MCP server: swiss-statistics-mcp

Features

  • 🔍 10 ready-to-use tools covering all major energy data layers from SFOE/BFE

  • Power plants — all types: photovoltaic, hydro, wind, biomass, nuclear, with optional category filter

  • 💨 Wind turbines — detailed data incl. manufacturer, model, hub height, annual production

  • 💧 Hydropower plants — type, status, turbine capacity, expected annual output

  • ☀️ PV large installations — project name, capacity, annual/winter production, altitude

  • 🌿 Biogas plants — plant name, output

  • 🏙️ Energiestädte — municipalities with the Swiss "Energiestadt" label (score, year awarded, audits)

  • 🏠 Solar roof potential — suitability category, area, orientation, and slope per roof segment

  • 📊 Location energy profile — combines 5 layers into a single overview for any Swiss location

  • 🗂️ SFOE dataset search — full-text search across SFOE publications on opendata.swiss

  • Status check — verifies availability of both upstream APIs

  • ☁️ Dual transport — stdio for Claude Desktop, Streamable HTTP for cloud deployment


Prerequisites

  • Python 3.11+

  • uv (recommended) or pip


Installation

Claude Desktop (stdio transport)

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "swiss-energy-mcp": {
      "command": "uvx",
      "args": ["swiss-energy-mcp"]
    }
  }
}

Config file locations:

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

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

Local development

git clone https://github.com/malkreide/swiss-energy-mcp.git
cd swiss-energy-mcp
uv sync
uv run swiss-energy-mcp

Cloud / HTTP transport (Streamable HTTP)

For use via claude.ai in the browser (e.g. on managed workstations without local software):

SWISS_ENERGY_TRANSPORT=http uvx swiss-energy-mcp

💡 "stdio for the developer laptop, HTTP for the browser."


Quickstart

Once connected in Claude Desktop, try:

What power plants are within 20 km of Bern?
Show me all wind turbines in the Jura region.
Is Zürich an Energiestadt? What's their score?
What is the solar potential of rooftops near lat=47.37, lon=8.54?
Give me a full energy profile for the region around Lucerne.
Find SFOE datasets about hydropower.

Available Tools

Tool

Description

energy_find_power_plants

All electricity generation plants within a radius (optional category filter)

energy_find_wind_turbines

Wind turbines with manufacturer, model, hub height

energy_find_hydro_plants

Hydropower plants with capacity and expected output

energy_find_pv_installations

Large PV installations with annual/winter production

energy_find_biogas_plants

Biogas plants

energy_find_energy_cities

Municipalities with "Energiestadt" label

energy_solar_potential

Solar suitability of roof segments at a location

energy_location_profile

Combined energy profile (5 layers) for a location

energy_search_bfe_datasets

Full-text search over SFOE datasets on opendata.swiss

energy_check_status

Check availability of GeoAdmin and opendata.swiss APIs

All tools accept WGS84 coordinates (lat/lon). Conversion to Swiss LV95 is handled internally.

Example Use Cases

Query

Tool

"Power plants near Bern (20 km radius)?"

energy_find_power_plants

"Wind turbines in the Jura?"

energy_find_wind_turbines

"Is Zürich an Energiestadt?"

energy_find_energy_cities

"Solar potential of rooftops near lat=47.37, lon=8.54?"

energy_solar_potential

"Full energy profile for Lucerne region?"

energy_location_profile

"SFOE datasets on hydropower?"

energy_search_bfe_datasets

→ More use cases by audience →


Data Sources

Source

URL

Auth

GeoAdmin REST API (swisstopo)

api3.geo.admin.ch

None

opendata.swiss CKAN API

opendata.swiss/api/3/action

None

BFE Layers used:

  • ch.bfe.elektrizitaetsproduktionsanlagen

  • ch.bfe.windenergieanlagen

  • ch.bfe.statistik-wasserkraftanlagen

  • ch.bfe.photovoltaik-grossanlagen

  • ch.bfe.biogasanlagen

  • ch.bfe.energiestaedte

  • ch.bfe.solarenergie-eignung-daecher


Configuration

All variables use the SWISS_ENERGY_ prefix and are validated at startup.

Environment variable

Default

Description

SWISS_ENERGY_TRANSPORT

stdio

Transport mode: stdio or http

SWISS_ENERGY_HOST

127.0.0.1

Host for HTTP transport. Bind 0.0.0.0 only inside a container.

SWISS_ENERGY_PORT

8000

Port for HTTP transport

SWISS_ENERGY_CORS_ORIGINS

https://claude.ai

Comma-separated allowed CORS origins (HTTP transport)

SWISS_ENERGY_ALLOWED_HOSTS

(empty)

Comma-separated inbound Host allow-list. Only needed for a non-loopback bind.

SWISS_ENERGY_LOG_LEVEL

INFO

Log level: DEBUG / INFO / WARNING / ERROR

SWISS_ENERGY_HTTP_TIMEOUT

20

Upstream HTTP timeout in seconds

Both list-valued variables also accept a JSON array — ["https://a.test"] — in addition to the comma-separated form.

See .env.example for a template.


MCP Protocol Version

This server speaks two protocol eras over the same endpoint. The client's first request on a connection decides which one applies; a later claim from the other era is refused.

Era

Revision

Who reaches it

initialize handshake

2024-11-052025-11-25

What today's clients speak. The server answers with the revision asked for, or with the 2025-11-25 ceiling when the request asks for something newer.

Per-request envelope

2026-07-28

A request carrying the 2026-07-28 _meta envelope opens a modern connection.

Both revisions are pinned in tests/test_protocol_version.py and asserted against the installed SDK, so a Dependabot bump of mcp cannot move either one silently. The handshake ceiling is measured against a live initialize through the assembled ASGI stack, not read off a constant name.

Note that the SDK's LATEST_PROTOCOL_VERSION is an alias for the modern era, not for the handshake era — pinning against it alone would leave the era that current clients actually negotiate free to drift.

Update policy. When the gate fails, do not edit the constant blindly: read the spec changelog between the two revisions, verify the server still behaves, then move the constant, this section, README.de.md and CHANGELOG.md together.

MCP Primitives

The server uses all three MCP primitives:

  • Tools — 10 read-only tools (see above). Every search tool returns an EnergyResponse envelope: structured results plus a Markdown summary, explicit source / license attribution, and a match_type field.

  • Resourceenergy://layers, the static catalogue of BFE GeoAdmin layers.

  • Promptenergy_site_assessment, a guided location-analysis template.

Development Phase

The server is in Phase 1 (read-only). See docs/roadmap.md for the phased architecture and docs/security.md for the egress allow-list, SSRF protection and trifecta assessment.


Safety & Limits

Aspect

Details

Access

Read-only (readOnlyHint: true) — the server cannot modify or delete any data

Personal data

No personal data — all sources are aggregated, public infrastructure data

Rate limits

Built-in per-query caps (max 50 search results, default 5 km radius)

Timeout

20 seconds per API call

Authentication

No API keys required — both APIs are publicly accessible

Licenses

All data under open licenses via opendata.swiss (OGD)

Terms of Service

Subject to ToS of the respective data sources: GeoAdmin, opendata.swiss, SFOE/BFE


Architecture

┌─────────────────┐     ┌───────────────────────────┐     ┌──────────────────────────┐
│   Claude / AI   │────▶│   Swiss Energy MCP        │────▶│  SFOE / BFE Open Data    │
│   (MCP Host)    │◀────│   (MCP Server)            │◀────│                          │
└─────────────────┘     │                           │     │  GeoAdmin REST API       │
                        │  10 Tools                 │     │  (api3.geo.admin.ch)     │
                        │  Stdio | HTTP             │     │                          │
                        │                           │     │  opendata.swiss CKAN     │
                        │  server.py (FastMCP)      │     │  (opendata.swiss)        │
                        │  api_client.py            │     └──────────────────────────┘
                        │   LV95 conversion         │
                        │   GeoAdmin queries        │
                        └───────────────────────────┘

Infrastructure Components

Component

Metaphor

Function

api_client.py

Switchboard

Handles HTTP requests, coordinate conversion, error handling

LV95 converter

Translator

Converts WGS84 (lat/lon) to Swiss coordinate system

server.py

Storefront

Exposes all 10 tools via FastMCP


Project Structure

swiss-energy-mcp/
├── src/
│   └── swiss_energy_mcp/
│       ├── server.py          # FastMCP setup, lifespan, entry point
│       ├── settings.py        # Typed configuration (pydantic-settings)
│       ├── logging_config.py  # Structured JSON logging to stderr
│       ├── api_client.py      # HTTP client, egress guard, LV95 conversion
│       ├── models.py          # Pydantic input/output models
│       ├── formatting.py      # Markdown summary builders
│       ├── resources.py       # Layer-catalogue resource + prompt
│       └── tools/             # One module per tool group
│           ├── installations.py   # power, wind, hydro, PV, biogas
│           ├── places.py          # solar, Energiestadt, location profile
│           └── catalog.py         # dataset search, status
├── tests/
│   ├── test_unit.py         # Pure-unit tests (coords, formatting, egress)
│   ├── test_tools.py        # Tool tests with respx-mocked APIs
│   └── test_live.py         # Live integration tests (marked `live`)
├── docs/                    # roadmap.md, security.md
├── Dockerfile               # Multi-stage build, non-root user
├── pyproject.toml
├── CHANGELOG.md
├── CONTRIBUTING.md          # Contribution guide (English)
├── CONTRIBUTING.de.md       # Contribution guide (German)
├── SECURITY.md              # Security policy (English)
├── SECURITY.de.md           # Security policy (German)
├── LICENSE
├── README.md                # This file (English)
└── README.de.md             # German version

Known Limitations

  • GeoAdmin radius search: Maximum search radius depends on layer density; very large radii may return partial results

  • Solar potential: Layer ch.bfe.solarenergie-eignung-daecher covers building footprints — not all roof types are classified

  • Energiestadt: Only municipalities with active label are included; historical entries may be incomplete

  • opendata.swiss CKAN: Full-text search covers metadata only, not document contents


Testing

# Unit tests (no API key required)
PYTHONPATH=src pytest tests/ -m "not live"

# Live integration tests (network access required)
PYTHONPATH=src pytest tests/ -m "live"

Changelog

See CHANGELOG.md


Contributing

See CONTRIBUTING.md (🇩🇪 Deutsch)


Security

See SECURITY.md (🇩🇪 Deutsch) for the security policy and posture summary, and docs/security.md for the full technical security model.


License

MIT License — see LICENSE


Author

Hayal Oezkan · malkreide


Installation

Run via uv's uvx — no clone or manual install needed. Add to your MCP client config (mcpServers for Claude Desktop, Cursor and Windsurf; use a top-level servers key for VS Code in .vscode/mcp.json):

{
  "mcpServers": {
    "swiss-energy-mcp": {
      "command": "uvx",
      "args": [
        "swiss-energy-mcp"
      ]
    }
  }
}

Available Tools

10 tools
energy_check_statusA
Read-only

Prüft die Verfügbarkeit der GeoAdmin- und opendata.swiss-APIs.

Diagnose bei unerwartetem Verhalten, Monitoring. Führt zwei leichtgewichtige Test-Requests aus.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
apisYes
layersYes
sourceYes
summaryYes

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 and destructiveHint=false. The description adds valuable context by stating that two lightweight test requests are executed, which informs the agent about the tool's internal behavior beyond the basic safety annotations. This goes beyond what annotations provide.

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 only two short sentences and well-structured semantic tags. It is front-loaded with the main purpose, followed by use case and important notes. Every sentence contributes, with no redundant content.

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?

Given the tool's simplicity (no parameters, read-only, clear purpose), the description fully covers the human intent needed for an agent. The annotations and output schema handle safety and return structure, while the description adds use cases and implementation details, making it complete.

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 there is no parameter structure to explain. The description adds clarity by stating what the tool checks and its overall behavior, which is appropriate for a no-parameter tool. A baseline of 4 applies here since there are no params.

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 purpose with a specific verb ('Prüft die Verfügbarkeit') and resource ('GeoAdmin- und opendata.swiss-APIs'), making it obvious that this is a health/status check tool. It is distinctly different from the sibling tools, which all perform search/find operations.

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 explicit use_case tag ('Diagnose bei unerwartetem Verhalten, Monitoring') provides clear guidance on when to invoke this tool. However, it does not explicitly mention alternatives or exclusion criteria, which would warrant a 5.

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

energy_find_biogas_plantsA
Read-onlyIdempotent

Sucht Biogasanlagen im Umkreis eines Standorts. Biogasanlagen erzeugen Energie aus organischen Abfällen und Biomasse.

Recherche zu Biomasse-Energie, regionale Kreislaufwirtschaft. Quelle: ch.bfe.biogasanlagen. lat=47.4, lon=8.5, radius_m=25000

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYesNumber of results
notesNoActionable hint when match_type is 'none'
sourceYesOriginating authority for the data
licenseYesLicence and attribution terms
resultsNo
summaryYesHuman-readable Markdown summary
match_typeYes'exact', 'fuzzy' or 'none' (no results)
provenanceYes

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, establishing a safe read operation. The description adds the data source ('Quelle: ch.bfe.biogasanlagen') but does not disclose additional behavioral traits such as rate limits, pagination, or result ordering. With annotations covering safety, a 3 is appropriate.

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 primary sentence followed by short, well-structured tags and an example. It is concise, front-loaded, and contains no filler or redundancy.

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 spatial-search tool with a full output schema and safe-read annotations, the description covers the use case, data source, and an example. It provides enough context for an agent to select and invoke the tool correctly without 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?

The input schema thoroughly documents all three parameters (lat, lon, radius_m) with descriptions and bounds. The tool description adds a concrete example (lat=47.4, lon=8.5, radius_m=25000), which illustrates valid values and usage. This adds value beyond the schema, justifying 4.

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 'Sucht Biogasanlagen im Umkreis eines Standorts', which identifies a specific verb ('searches'), resource ('biogas plants'), and location scope. This clearly distinguishes it from sibling tools like energy_find_power_plants or energy_find_wind_turbines.

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 use_case tag ('Recherche zu Biomasse-Energie, regionale Kreislaufwirtschaft') gives clear context for when to use this tool. However, it does not explicitly state exclusions or name alternatives, so it falls short of a 5.

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

energy_find_energy_citiesA
Read-onlyIdempotent

Sucht Gemeinden mit dem Label «Energiestadt» per Name oder Standort.

Vergleich der Energiepolitik von Gemeinden, kommunale Recherche. Quelle: ch.bfe.energiestaedte. Entweder name ODER lat/lon angeben — nicht beides leer lassen. name='Zürich' | lat=47.35, lon=8.65, radius_m=50000

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYesNumber of results
notesNoActionable hint when match_type is 'none'
sourceYesOriginating authority for the data
licenseYesLicence and attribution terms
resultsNo
summaryYesHuman-readable Markdown summary
match_typeYes'exact', 'fuzzy' or 'none' (no results)
provenanceYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds the data source (ch.bfe.energiestaedte) and the requirement that exactly one of name or location be used. 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?

The description is concise and immediately understandable. The use of structured tags (use_case, important_notes, example) adds value without redundancy, and every sentence serves a purpose.

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 read-only search tool with a rich schema and clear annotations, the description covers the core purpose, use context, critical constraint, and example. The output schema presumably documents return values, so no further explanation is needed.

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 input schema already provides detailed descriptions for all parameters. The description goes beyond by reinforcing the mutual exclusivity of name vs. lat/lon and offers a concrete example with sample values, which helps the agent construct valid invocations.

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 'Sucht' (searches) and a clear resource: municipalities with the 'Energiestadt' label. It distinguishes itself from sibling tools by targeting municipalities rather than power plants or wind turbines.

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 a concrete use case (comparing municipal energy policy) and an important constraint (either name or lat/lon must be provided). It does not explicitly mention alternatives among the sibling tools, but the use case and condition make appropriate usage clear.

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

energy_find_hydro_plantsA
Read-onlyIdempotent

Sucht Wasserkraftwerke (Lauf-, Speicher-, Pumpspeicher) im Umkreis eines Standorts inkl. Leistung, Fallhöhe und erwarteter Jahresproduktion.

Analyse der regionalen Wasserkraft, Infrastruktur-Recherche. Quelle: ch.bfe.statistik-wasserkraftanlagen. lat=47.05, lon=8.31, radius_m=30000

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYesNumber of results
notesNoActionable hint when match_type is 'none'
sourceYesOriginating authority for the data
licenseYesLicence and attribution terms
resultsNo
summaryYesHuman-readable Markdown summary
match_typeYes'exact', 'fuzzy' or 'none' (no results)
provenanceYes

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already indicate readOnly, openWorld, idempotent, and non-destructive behavior. The description adds the data source (ch.bfe.statistik-wasserkraftanlagen) and notes the output fields, but does not disclose behavior like pagination, result limits, ordering, or permission requirements. It provides moderate context beyond annotations, but not rich behavioral detail.

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 a clear main sentence followed by structured XML tags for use case, important notes, and an example. It is front-loaded with the core purpose and avoids unnecessary fluff. The example is slightly redundant with the schema descriptions but adds a practical touch.

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 an output schema, the description covers the necessary context: purpose, use case, data source, and an example. It implies Swiss scope through the source and coordinate bounds, but does not explicitly state it. Still, the combination of description, schema, and annotations is sufficient for an agent to use this tool effectively.

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 tool description does not explain individual parameters; however, the input schema extensively describes lat, lon, and radius_m with examples, ranges, and defaults. The example in the description (lat=47.05, lon=8.31, radius_m=30000) provides a concrete usage hint. Since schema coverage is high, a baseline of 3 is appropriate; the description adds only minimal parameter semantics 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 a specific action (search for hydro plants around a location) with a specific resource (Wasserkraftwerke, including subtypes Lauf-, Speicher-, Pumpspeicher). It lists key output attributes (Leistung, Fallhöhe, Jahresproduktion), and the tool name itself distinguishes it from sibling tools like wind turbines or PV installations.

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 use case ('Analyse der regionalen Wasserkraft, Infrastruktur-Recherche'), giving clear context for when to use it. It does not explicitly mention alternatives or when not to use it, but the specificity of hydro plants and the mention of regional analysis make the intended use fairly clear.

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

energy_find_power_plantsA
Read-onlyIdempotent

Sucht Elektrizitätsproduktionsanlagen aller Typen (Photovoltaik, Wasserkraft, Wind, Biomasse, Kernkraft) im Umkreis eines Standorts.

Standortanalysen, politische und journalistische Recherche, Schul- und Verwaltungsprojekte zur lokalen Stromproduktion. Quelle: BFE-Layer ch.bfe.elektrizitaetsproduktionsanlagen. Optionaler category_filter grenzt auf einen Anlagentyp ein. Liefert max. 201 Treffer pro Aufruf. lat=46.948, lon=7.447, radius_m=20000, category_filter='Photovoltaik'

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYesNumber of results
notesNoActionable hint when match_type is 'none'
sourceYesOriginating authority for the data
licenseYesLicence and attribution terms
resultsNo
summaryYesHuman-readable Markdown summary
match_typeYes'exact', 'fuzzy' or 'none' (no results)
provenanceYes

TDQS

A4.3/5.0
Behavior4/5

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

The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable behavioral context beyond these: the data source (BFE-Layer ch.bfe.elektrizitaetsproduktionsanlagen), the optional category_filter behavior, and the maximum of 201 results per call. No contradiction with annotations exists.

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, using XML-style tags (<use_case>, <important_notes>, <example>) to separate sections. It front-loads the core purpose in a single sentence, then adds essential notes without unnecessary verbosity. Every sentence 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 tool with four parameters and an output schema, the description covers all critical aspects: purpose, use cases, source, optional filter, result limit, and a concrete example. It is complete enough for an agent to select and invoke the tool correctly, even without deep schema exploration.

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 context signal indicates schema description coverage is 0%, so the description must compensate for missing parameter documentation. The description mentions the category_filter and provides an example with lat, lon, radius_m, and category_filter, but it does not explicitly explain the semantics or bounds of lat/lon/radius_m. The schema does include descriptions for these fields, but from the agent's perspective (with 0% coverage), the description only partially fills the gap.

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 with the verb 'Sucht' (searches) and the resource 'Elektrizitätsproduktionsanlagen aller Typen' (electricity production plants of all types), listing specific types. It distinguishes from sibling tools by emphasizing 'aller Typen' and listing the categories, making it clear this is the general-purpose finder.

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 use cases (Standortanalysen, Recherche, Schulprojekte) and an example invocation. However, it does not explicitly contrast with sibling tools (e.g., telling the agent to use energy_find_wind_turbines for wind-only queries). The sibling names and the 'aller Typen' phrasing imply the differentiation but do not explicitly state when to use alternatives.

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

energy_find_pv_installationsA
Read-onlyIdempotent

Sucht Photovoltaik-Grossanlagen im Umkreis eines Standorts inkl. Leistung (MWp), Jahres- und Winterproduktion sowie Projektstatus.

Recherche zu PV-Grossprojekten, Energieplanung. Quelle: ch.bfe.photovoltaik-grossanlagen. Erfasst nur Grossanlagen — Einzel-PV erscheint in energy_find_power_plants. lat=46.2, lon=7.5, radius_m=40000

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYesNumber of results
notesNoActionable hint when match_type is 'none'
sourceYesOriginating authority for the data
licenseYesLicence and attribution terms
resultsNo
summaryYesHuman-readable Markdown summary
match_typeYes'exact', 'fuzzy' or 'none' (no results)
provenanceYes

TDQS

A4.5/5.0
Behavior4/5

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

The annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds valuable context beyond these: the data source ('Quelle: ch.bfe.photovoltaik-grossanlagen') and the scope limitation (only large-scale systems are included). However, it does not disclose additional traits such as pagination, ordering, or behavior when no results are found.

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 using XML-style elements (use_case, important_notes, example). It front-loads the primary purpose, followed by contextual guidance and a concrete example. Every sentence contributes meaningful information without redundancy.

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?

The description covers the purpose, use case, important scope notes, a parameter example, and the source of data. It also mentions output fields (Leistung, Jahres- und Winterproduktion, Projektstatus). With an output schema present, the description is sufficiently complete for an agent to understand what the tool does and when to use it.

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 description does not explain each parameter, but the example 'lat=46.2, lon=7.5, radius_m=40000' provides a concrete usage pattern. The input schema itself contains detailed descriptions for lat, lon, and radius_m, including bounds and defaults, so the example supplements the schema without repetition. Given schema_description_coverage is 0%, the description only partially compensates with the example.

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 purpose with a specific verb+resource: 'Sucht Photovoltaik-Grossanlagen' (finds PV large-scale systems). It also lists key output fields (Leistung, Jahres- und Winterproduktion, Projektstatus) and explicitly distinguishes from sibling tools via the important_notes, noting that individual PV installations are found in energy_find_power_plants.

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 use_case element gives clear context for when to use the tool ('Recherche zu PV-Grossprojekten, Energieplanung'). The important_notes explicitly states a limitation and an alternative: 'Erfasst nur Grossanlagen — Einzel-PV erscheint in energy_find_power_plants', providing a when-not-to-use condition and naming the alternative tool.

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

energy_find_wind_turbinesA
Read-onlyIdempotent

Sucht Windenergieanlagen im Umkreis eines Standorts inkl. Betreiber, Hersteller, Modell, Nabenhöhe und Leistung.

Recherche zu Windkraft-Standorten, regionale Energieplanung. Quelle: ch.bfe.windenergieanlagen. Windkraft konzentriert sich auf Jura, Wallis und Mittelland — für landesweite Suchen radius_m bis 50000 m wählen oder die Koordinaten anpassen. lat=47.22, lon=7.05, radius_m=30000

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYesNumber of results
notesNoActionable hint when match_type is 'none'
sourceYesOriginating authority for the data
licenseYesLicence and attribution terms
resultsNo
summaryYesHuman-readable Markdown summary
match_typeYes'exact', 'fuzzy' or 'none' (no results)
provenanceYes

TDQS

A4.6/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 destructiveHint=false. The description adds context beyond this by naming the data source (ch.bfe.windenergieanlagen), noting the regional concentration of wind turbines, and mentioning the result fields — useful behavioral details without contradicting the safe-read annotation.

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 structured with XML tags for use_case, important_notes, and example, each earning its place. The main sentence is front-loaded and direct, followed by brief, valuable notes. Slightly longer than the minimal two-sentence style, but every part adds meaningful guidance.

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?

This is a simple spatial-search tool with three parameters and an output schema available. The description covers the purpose, use case, relevant background (Swiss regions), and a concrete example, making it complete for an agent to select and invoke correctly. The output schema handles return value documentation, so the description does not need to explain that.

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 description does not explicitly define parameters, but the example (lat=47.22, lon=7.05, radius_m=30000) demonstrates usage, and the important notes clarify the radius_m maximum. The input schema itself provides per-parameter descriptions, so the description adds complementary illustrative context rather than leaving the agent without guidance.

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 'Sucht Windenergieanlagen im Umkreis eines Standorts' (searches for wind turbines in the vicinity of a location), which clearly specifies the action and resource. It also lists the data points returned (operator, manufacturer, model, hub height, power), distinguishing it from sibling tools that focus on other energy types.

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 provides an explicit use case ('Recherche zu Windkraft-Standorten, regionale Energieplanung') and important notes about Swiss wind farm distribution and radius recommendations, guiding when and how to use the tool effectively. It does not explicitly name alternatives, but the sibling tool list makes the specialization obvious.

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

energy_location_profileA
Read-onlyIdempotent

Erstellt ein vollständiges Energieprofil für einen Standort und aggregiert dafür fünf BFE-Layer (Produktionsanlagen, Wind, Wasser, PV-Gross, Energiestädte) in einem einzigen Aufruf.

Schneller Gesamtüberblick für Berichte der Stadtverwaltung, Standortentscheide und Demos — beantwortet die Anchor-Frage in einem Aufruf. Aggregiert mehrere parallele API-Calls; typische Laufzeit unter 5 s. Quelle: GeoAdmin / BFE. lat=47.05, lon=8.31, radius_m=20000

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYesNumber of results
notesNoActionable hint when match_type is 'none'
sourceYesOriginating authority for the data
licenseYesLicence and attribution terms
resultsNo
summaryYesHuman-readable Markdown summary
match_typeYes'exact', 'fuzzy' or 'none' (no results)
provenanceYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already indicate read-only, idempotent, and safe behavior. The description adds useful context: it aggregates multiple parallel API calls, typical runtime <5s, and data source (GeoAdmin/BFE), which goes beyond annotation metadata.

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 well-structured with a concise opening sentence followed by use_case, important_notes, and example tags. Each element serves a distinct purpose, and there is no redundant or filler content.

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's aggregation complexity, the description covers purpose, use cases, performance characteristics, and an example. An output schema exists to document return values, so the description does not need to explain that. It is complete for effective selection and invocation.

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

Parameters2/5

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

The description does not mention parameters at all. Although the nested schema documents lat/lon/radius_m, the top-level schema coverage is 0% per context signals, and the description fails to compensate by explaining parameter usage or semantics.

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 creates a complete energy profile for a location by aggregating five BFE layers. It uses a specific verb ('Erstellt') and resource ('Energieprofil'), and the distinction from sibling tools (which target individual layers) is evident.

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 <use_case> tag explicitly states when to use it (reports, location decisions, demos) and emphasizes a single-call overview, which contrasts with the sibling finder tools. However, it does not name alternative tools explicitly, only implies them.

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

energy_search_bfe_datasetsA
Read-onlyIdempotent

Durchsucht den opendata.swiss-Katalog nach Datensätzen des Bundesamts für Energie (BFE).

Auffinden von BFE-Rohdaten und Statistiken, Datenrecherche jenseits der Geo-Layer. Liefert Metadaten (Titel, Beschreibung, Formate, Link) — keine Rohdaten. Volltextsuche deckt nur Metadaten ab. Paginierung über offset. query='wasserkraft', limit=10, offset=0

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYesNumber of results
notesNoActionable hint when match_type is 'none'
sourceYesOriginating authority for the data
licenseYesLicence and attribution terms
resultsNo
summaryYesHuman-readable Markdown summary
match_typeYes'exact', 'fuzzy' or 'none' (no results)
provenanceYes

TDQS

A3.9/5.0
Behavior4/5

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

The description adds valuable behavioral context beyond annotations: it returns metadata (title, description, formats, link) and not raw data, full-text search is metadata-only, and pagination uses offset. This complements the readOnlyHint and idempotentHint annotations without contradicting them.

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 well-structured with a short main sentence, use_case, important_notes, and example. It is slightly longer than the minimal two-sentence ideal but every section adds value and the information is tightly packed 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?

The description covers purpose, usage context, limitations, and gives an example. Since an output schema exists, return values need not be described. The combination of annotations and description is sufficient for an agent to understand the tool's behavior and constraints.

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 already contains descriptions for limit, query, and offset. The description adds an example (query='wasserkraft', limit=10, offset=0) and notes that offset is used for pagination, but does not substantially extend parameter meaning beyond the schema. Given the schema description coverage is reported as 0%, the example and pagination note provide partial compensation.

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

Purpose4/5

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

The description clearly states the tool searches the opendata.swiss catalog for datasets from the BFE, a specific verb+resource. It does not explicitly differentiate from siblings like energy_find_power_plants, but the focus on dataset search rather than specific asset types is evident from the description and name.

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 use_case clarifies when to use it (finding raw data and statistics beyond geo-layers), and important_notes state that it returns metadata only and that full-text search covers metadata, not raw data. This provides clear context for usage, though it does not explicitly name alternatives or when-not-to-use scenarios.

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

energy_solar_potentialA
Read-onlyIdempotent

Fragt die Solareignung von Dächern für einen Standort ab.

Entscheide über PV-Anlagen auf Schulhäusern und öffentlichen Gebäuden, Solarpotenzial-Analysen. Quelle: ch.bfe.solarenergie-eignung-daecher (Rasterdaten). Kleine Radien liefern evtl. keine Treffer; der Radius wird intern auf mindestens 2000 m angehoben. Eignungsklassen: 1 (sehr gut) bis 5 (nicht geeignet). lat=47.37, lon=8.54, radius_m=3000

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYesNumber of results
notesNoActionable hint when match_type is 'none'
sourceYesOriginating authority for the data
licenseYesLicence and attribution terms
resultsNo
summaryYesHuman-readable Markdown summary
match_typeYes'exact', 'fuzzy' or 'none' (no results)
provenanceYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare the tool read-only, idempotent, and non-destructive. The description adds critical behavioral details: the internal radius is raised to at least 2000m, small radii may yield no results, and suitability classes are numbered 1-5. These go beyond annotation metadata and clarify real-world behavior.

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 and front-loaded with the core statement. The use of structured tags for use_case, important_notes, and example makes it highly scannable. Every sentence contributes unique value with no redundancy.

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?

The description covers purpose, use case, data source, radius behavior, and suitability classes. Since an output schema exists, the description does not need to explain return values. It is fully adequate for a spatial query tool of this complexity.

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 input schema fully documents lat, lon, and radius_m with ranges and defaults. The description adds a concrete example (lat=47.37, lon=8.54, radius_m=3000) and a note about the radius being internally raised to 2000m, enhancing the semantic understanding of the parameters 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 queries the solar suitability of roofs for a location ('Fragt die Solareignung von Dächern für einen Standort ab'). It is specific with verb and resource, and the use case distinguishes it from sibling tools about power plants, wind turbines, and other energy infrastructure.

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 use_case explicitly describes when to use this tool (deciding on PV systems on school/public buildings, solar potential analyses). It does not name alternative tools or exclusion criteria, but the provided context is sufficient for basic usage decisions.

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. 10 tool updatesv0.4.0
    • First observedenergy_check_status
    • First observedenergy_find_biogas_plants
    • First observedenergy_find_energy_cities
    • First observedenergy_find_hydro_plants
    • First observedenergy_find_power_plants
    • First observedenergy_find_pv_installations
    • First observedenergy_find_wind_turbines
    • First observedenergy_location_profile
    • First observedenergy_search_bfe_datasets
    • First observedenergy_solar_potential

TDQS

A4/5.0
Disambiguation3/5

Several tools overlap: energy_find_power_plants covers all plant types, while the specific find tools (wind, hydro, PV, biogas) duplicate the same search for a single category. Although descriptions clarify the extra details each specific tool provides, an agent could select the wrong one for a given task. Other tools like energy_solar_potential and energy_check_status are clearly distinct.

Naming Consistency3/5

The energy_find_* tools follow a consistent verb_noun pattern, but energy_solar_potential and energy_location_profile use noun phrases, and energy_search_bfe_datasets uses 'search' instead of 'find'. This mix of conventions is readable but not fully consistent.

Tool Count5/5

With 10 tools, the server is well-scoped within the ideal 3-15 range. Each tool covers a distinct aspect of Swiss energy data queries, and none feel redundant or unnecessary.

Completeness4/5

The server provides comprehensive location-based energy data queries, including a convenient aggregation tool (energy_location_profile). Minor gaps exist: biogas is not explicitly included in the location profile, and there is no direct lookup by plant identifier. Overall, the core domain is well covered.

Maintenance

ActivityActive
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
    Not graded
    quality
    A
    maintenance
    87+ specialized tools for German and European energy data. Direct AI access to Marktstammdatenregister (MaStR), ENTSO-E, Redispatch 2.0, and Grid Operations for utilities and datacenters.
    2
    GPL 3.0
  • A
    license
    A
    quality
    A
    maintenance
    Provides AI-native access to Swiss Federal Statistical Office datasets through 9 tools for querying education, population, and cross-cantonal comparisons without authentication.
    15
    2
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables AI models to access Swiss weather and climate data from MeteoSwiss, including current observations, forecasts, and warnings.
    6
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Provides real-time electricity prices, cheapest hours, and contract comparison for 40+ countries, enabling AI agents to make energy-aware decisions.
    3
    -

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/malkreide/swiss-energy-mcp'

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