swiss-energy-mcp
This server provides read-only, location-based access to Swiss energy infrastructure data from the Federal Office of Energy (SFOE/BFE) via GeoAdmin and opendata.swiss — no authentication required. You can:
Find power plants of all types (PV, hydro, wind, biomass, nuclear) within a radius, with optional category filter.
Find wind turbines and get details like manufacturer, model, hub height, and annual production.
Find hydropower plants including type, status, capacity, and expected output.
Find large PV installations with capacity, annual/winter production, and project status.
Find biogas plants and their output data.
Assess solar roof potential for roof segments (suitability class, area, orientation, slope).
Find Energiestädte (Energy Cities) by name or location, with scores and award years.
Generate a location energy profile aggregating five data layers (power plants, wind, hydro, large PV, energy cities) in one call.
Search SFOE datasets full-text on opendata.swiss for statistics and publications.
Check API status to verify upstream service availability.
All tools accept WGS84 coordinates (auto‑converted to Swiss LV95) and return structured results with summaries, source attribution, and match type. Supports stdio (desktop) and Streamable HTTP (cloud/browser) transports.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@swiss-energy-mcpWhat power plants are within 20 km of Bern?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
🇨🇭 Part of the Swiss Public Data MCP Portfolio
⚡ swiss-energy-mcp
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.
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) orpip
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.jsonWindows:
%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-mcpCloud / 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 |
| All electricity generation plants within a radius (optional category filter) |
| Wind turbines with manufacturer, model, hub height |
| Hydropower plants with capacity and expected output |
| Large PV installations with annual/winter production |
| Biogas plants |
| Municipalities with "Energiestadt" label |
| Solar suitability of roof segments at a location |
| Combined energy profile (5 layers) for a location |
| Full-text search over SFOE datasets on opendata.swiss |
| 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)?" |
|
"Wind turbines in the Jura?" |
|
"Is Zürich an Energiestadt?" |
|
"Solar potential of rooftops near lat=47.37, lon=8.54?" |
|
"Full energy profile for Lucerne region?" |
|
"SFOE datasets on hydropower?" |
|
→ More use cases by audience →
Data Sources
Source | URL | Auth |
GeoAdmin REST API (swisstopo) |
| None |
opendata.swiss CKAN API |
| None |
BFE Layers used:
ch.bfe.elektrizitaetsproduktionsanlagench.bfe.windenergieanlagench.bfe.statistik-wasserkraftanlagench.bfe.photovoltaik-grossanlagench.bfe.biogasanlagench.bfe.energiestaedtech.bfe.solarenergie-eignung-daecher
Configuration
All variables use the SWISS_ENERGY_ prefix and are validated at startup.
Environment variable | Default | Description |
|
| Transport mode: |
|
| Host for HTTP transport. Bind |
|
| Port for HTTP transport |
|
| Comma-separated allowed CORS origins (HTTP transport) |
| (empty) | Comma-separated inbound |
|
| Log level: |
|
| 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 |
|
| What today's clients speak. The server answers with the revision asked for, or with the |
Per-request envelope |
| A request carrying the |
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
EnergyResponseenvelope: structuredresultsplus a Markdownsummary, explicitsource/licenseattribution, and amatch_typefield.Resource —
energy://layers, the static catalogue of BFE GeoAdmin layers.Prompt —
energy_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 ( |
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 |
| Switchboard | Handles HTTP requests, coordinate conversion, error handling |
LV95 converter | Translator | Converts WGS84 (lat/lon) to Swiss coordinate system |
| 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 versionKnown 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-daechercovers building footprints — not all roof types are classifiedEnergiestadt: 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
Credits & Related Projects
Data: SFOE/BFE via GeoAdmin — Swiss Federal Office of Energy
Data: opendata.swiss — Swiss Open Government Data portal
Protocol: Model Context Protocol — Anthropic / Linux Foundation
Related: swiss-road-mobility-mcp — MCP server for Swiss mobility data
Related: zurich-opendata-mcp — MCP server for Zurich city open data
Portfolio: Swiss Public Data MCP Portfolio
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 toolsenergy_check_statusARead-only
Prüft die Verfügbarkeit der GeoAdmin- und opendata.swiss-APIs.
Diagnose bei unerwartetem Verhalten, Monitoring. Führt zwei leichtgewichtige Test-Requests aus.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| apis | Yes | |
| layers | Yes | |
| source | Yes | |
| summary | Yes |
TDQS
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.
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.
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.
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.
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.
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_plantsARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | Number of results |
| notes | No | Actionable hint when match_type is 'none' |
| source | Yes | Originating authority for the data |
| license | Yes | Licence and attribution terms |
| results | No | |
| summary | Yes | Human-readable Markdown summary |
| match_type | Yes | 'exact', 'fuzzy' or 'none' (no results) |
| provenance | Yes |
TDQS
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.
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.
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.
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.
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.
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_citiesARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | Number of results |
| notes | No | Actionable hint when match_type is 'none' |
| source | Yes | Originating authority for the data |
| license | Yes | Licence and attribution terms |
| results | No | |
| summary | Yes | Human-readable Markdown summary |
| match_type | Yes | 'exact', 'fuzzy' or 'none' (no results) |
| provenance | Yes |
TDQS
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.
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.
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.
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.
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.
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_plantsARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | Number of results |
| notes | No | Actionable hint when match_type is 'none' |
| source | Yes | Originating authority for the data |
| license | Yes | Licence and attribution terms |
| results | No | |
| summary | Yes | Human-readable Markdown summary |
| match_type | Yes | 'exact', 'fuzzy' or 'none' (no results) |
| provenance | Yes |
TDQS
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.
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.
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.
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.
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.
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_plantsARead-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'
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | Number of results |
| notes | No | Actionable hint when match_type is 'none' |
| source | Yes | Originating authority for the data |
| license | Yes | Licence and attribution terms |
| results | No | |
| summary | Yes | Human-readable Markdown summary |
| match_type | Yes | 'exact', 'fuzzy' or 'none' (no results) |
| provenance | Yes |
TDQS
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.
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.
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.
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.
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.
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_installationsARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | Number of results |
| notes | No | Actionable hint when match_type is 'none' |
| source | Yes | Originating authority for the data |
| license | Yes | Licence and attribution terms |
| results | No | |
| summary | Yes | Human-readable Markdown summary |
| match_type | Yes | 'exact', 'fuzzy' or 'none' (no results) |
| provenance | Yes |
TDQS
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.
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.
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.
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.
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.
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_turbinesARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | Number of results |
| notes | No | Actionable hint when match_type is 'none' |
| source | Yes | Originating authority for the data |
| license | Yes | Licence and attribution terms |
| results | No | |
| summary | Yes | Human-readable Markdown summary |
| match_type | Yes | 'exact', 'fuzzy' or 'none' (no results) |
| provenance | Yes |
TDQS
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.
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.
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.
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.
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.
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_profileARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | Number of results |
| notes | No | Actionable hint when match_type is 'none' |
| source | Yes | Originating authority for the data |
| license | Yes | Licence and attribution terms |
| results | No | |
| summary | Yes | Human-readable Markdown summary |
| match_type | Yes | 'exact', 'fuzzy' or 'none' (no results) |
| provenance | Yes |
TDQS
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.
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.
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.
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.
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.
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_datasetsARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | Number of results |
| notes | No | Actionable hint when match_type is 'none' |
| source | Yes | Originating authority for the data |
| license | Yes | Licence and attribution terms |
| results | No | |
| summary | Yes | Human-readable Markdown summary |
| match_type | Yes | 'exact', 'fuzzy' or 'none' (no results) |
| provenance | Yes |
TDQS
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.
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.
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.
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.
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.
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_potentialARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | Number of results |
| notes | No | Actionable hint when match_type is 'none' |
| source | Yes | Originating authority for the data |
| license | Yes | Licence and attribution terms |
| results | No | |
| summary | Yes | Human-readable Markdown summary |
| match_type | Yes | 'exact', 'fuzzy' or 'none' (no results) |
| provenance | Yes |
TDQS
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.
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.
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.
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.
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.
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.
10 tool updates
v0.4.0- First observed
energy_check_status - First observed
energy_find_biogas_plants - First observed
energy_find_energy_cities - First observed
energy_find_hydro_plants - First observed
energy_find_power_plants - First observed
energy_find_pv_installations - First observed
energy_find_wind_turbines - First observed
energy_location_profile - First observed
energy_search_bfe_datasets - First observed
energy_solar_potential
TDQS
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.
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.
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.
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
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
Swiss weather data for AI assistants — forecasts, measurements, stations, pollen.
Real-time electricity price signals for AI agents. Spot prices, cheapest hours, and contract recommendations. 31 countries across Europe and Oceania. No authentication required.
Real-time electricity prices for AI agents. 40+ countries, 100+ zones. No auth required.
Protocol-native energy infrastructure orchestration for AI data centers. Provides 46 MCP tools across 8 grid protocols (IEC-61850, DNP3, Modbus, OCPP, OpenADR, IEEE 2030.5, IEC 60870-5-104, ICCP) with 5 core API primitives: connect, dispatch, settle, comply, and intel. Enables AI agents to programmatically interact with substations, grid interfaces, and energy assets for real-time workload-grid coordination.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenance87+ 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.2GPL 3.0
- AlicenseAqualityAmaintenanceProvides AI-native access to Swiss Federal Statistical Office datasets through 9 tools for querying education, population, and cross-cantonal comparisons without authentication.152MIT
- AlicenseAqualityAmaintenanceEnables AI models to access Swiss weather and climate data from MeteoSwiss, including current observations, forecasts, and warnings.6MIT
- FlicenseNot gradedqualityBmaintenanceProvides real-time electricity prices, cheapest hours, and contract comparison for 40+ countries, enabling AI agents to make energy-aware decisions.3-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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