瑞典太阳能MCP
微软Copilot Studio的人工智能太阳能发电预测
MCP(模型上下文协议)服务器,将瑞典太阳能电池板安装数据与实时SMHI天气预报相结合,使Microsoft Copilot Studio能够回答有关瑞典太阳能生产的自然语言问题。
______________________________________________________________________
实时部署
| 端点 | URL |
|---|---|
| MCP(流式HTTP) | https://solar-mcp.thankfulglacier-f4abeca6.swedencentral.azurecontainerapps.io/mcp |
| MCP(SSE回退) | https://solar-mcp.thankfulglacier-f4abeca6.swedencentral.azurecontainerapps.io/sse |
| 健康检查 | https://solar-mcp.thankfulglacier-f4abeca6.swedencentral.azurecontainerapps.io/health |
Copilot工作室设置: 话题→ 添加动作→ MCP → 粘贴 /mcp 上面的URL→ 所有8个工具都是自动发现的。
______________________________________________________________________
你能问什么?
| 问题 | 工具 |
|---|---|
| *“卡尔斯克鲁纳的太阳能发展有多快?”* | get_solar_growth |
| *“哪个城市增长最快?”* | get_fastest_growth |
| *“本周云将花费我们多少电力?”* | compare_generation_forecast |
| *“下周哪个地区将产生最多的太阳能?”* | find_optimal_solar_region |
| *“给我看瑞典各地太阳能发电量的地图”* | get_solar_map |
| *“明天SE3的电价是多少?”* | get_electricity_prices |
| *“哪些城市位于SE3和SE4的边界?”* | list_zone_border_municipalities |
| *“卡尔斯克鲁纳的太阳能产品今天值多少钱?”* | estimate_solar_revenue |
______________________________________________________________________
工具
历史太阳能数据(能源数据)
get_solar_growth:返回瑞典任何城市的历史容量增长:自2016年以来的同比百分比和复合年增长率。get_fastest_growth:根据两年内太阳能电池板安装增长最快的城市对所有城市进行排名。get_solar_map:返回瑞典按城市太阳能装机容量(kW)着色的choropleth PNG地图,以及包含全国总量和前10个城市的JSON摘要。
天气和发电量预报(SMHI)
compare_generation_forecast:将未来几天的预期发电量与完美晴朗的天空情景进行比较,以千瓦时和百分比显示云层覆盖损失。find_optimal_solar_region:根据(1)最阳光的预测和(2)最高的预期发电量对15个城市进行排名。
电价(北池)
get_electricity_prices:返回Nord Pool四个瑞典定价区(SE1–SE4)的日前电力现货价格。list_zone_border_municipalities:列出位于电价区边界的城市,可用于跨境价格比较。
综合分析
estimate_solar_revenue:结合SMHI天气预报、太阳能装机容量和北池电力现货价格,估算特定日期市政太阳能发电的财务价值。
______________________________________________________________________
数据源
- 能源消耗 -290个城市×9年(2016-2024年),通过PxWeb API下载并缓存为Parquet。国家能力从 134兆瓦→ 4,808兆瓦 在此期间。
- SMHI开放数据 --免费9天定点天气预报(CC BY 4.0)。清晰度来自加权云层覆盖率(lcc/mcc/hcc),而不仅仅是天气符号。
- 通过mgrey.se连接北池 --日前电力现货价格(SE1-SE4)。明天的价格通常在欧洲中部时间13:00后公布。
- okfse/瑞典geojson --290功能GeoJSON用于choropleth地图。
______________________________________________________________________
Copilot Studio代理设置
1.创建或打开代理
首选 副驾驶工作室,创建新代理或打开现有代理。
2.添加MCP服务器
导航至 行动 在左侧边栏中→ 添加操作 → 模型上下文协议.
输入服务器URL:
https://solar-mcp.thankfulglacier-f4abeca6.swedencentral.azurecontainerapps.io/mcpCopilot Studio将连接并自动发现所有8个工具。不需要身份验证。
3.服务器描述
当系统提示输入服务器名称和描述时,请使用:
姓名: 瑞典太阳能MCP 说明: 提供瑞典各市太阳能电池板安装的实时和历史数据。使用它来回答有关太阳能容量增长、经天气调整的发电量预测、北池电价、区域比较的问题,并生成瑞典太阳能基础设施的视觉choropleth地图。数据涵盖了2016年至2024年瑞典所有290个城市,包括SMHI的实时天气和Nord Pool的现货价格。
4.代理说明
将以下内容添加到您的代理中 说明 字段,为其提供正确的上下文(您可以在中查看完整的瑞典语说明 copilot-studio-instructions.md):
Du är Solar Sverige, en specialiserad assistent för solenergidata och
elmarknadsanalys i Sverige. Svara alltid på svenska.
Du kan svara på frågor om:
- Hastigheten för solcellsutbyggnad i specifika kommuner
- Den förväntade elproduktionen (kWh) för de kommande dagarna
- Elpriser från Nord Pool (SE1-SE4)
- Beräknade intäkter för solenergi i en kommun
- Kartor över solkapaciteten i Sverige
När du visar ett kart-URL från get_solar_map, rendera det alltid som en inbäddad
bild med markdown-syntaxen . Säg inte "Jag kan inte visa bilder" -
bilden är en renderad PNG som fungerar i chatten.5.测试一下
使用 测试 Copilot Studio中的窗格,显示以下示例提示:
- *“卡尔斯克鲁纳的太阳能发展有多快?”*
- *“2020年至2024年期间,哪个城市增长最快?”*
- *“与晴朗的天空相比,哥德堡本周会产生什么?”*
- *“SE3目前的电力现货价格是多少?”*
- *“根据北池现货价格,马尔默的太阳能预计明天能赚多少钱?”*
- *“未来7天,瑞典哪个城市将产生最多的太阳能?”*
- *“给我看瑞典各地太阳能发电量的地图”*
______________________________________________________________________
快速入门(本地)
# Install dependencies
uv sync
# Download real data (first time only)
uv run python scripts/download_solar_data.py # → data/processed/solar_installations.parquet
uv run python scripts/download_geo.py # → data/geo/municipalities.geojson
uv run python -m playwright install chromium # for get_solar_map screenshots
# Run the server
uv run uvicorn solar_mcp.server:app --reload --port 8000
# Run the tests
uv run pytest tests/ -v # 44 tests将Copilot Studio连接到 http://localhost:8000/mcp 用于本地测试。
窗户: 如果uv run由于权限问题而失败,请使用.venv/Scripts/python -m uvicorn ...相反。
______________________________________________________________________
项目结构
solar-sweden-mcp/
├── data/
│ ├── raw/ ← cached API response (JSON)
│ ├── processed/ ← solar_installations.parquet (290 municipalities)
│ └── geo/ ← municipalities.geojson (290 features)
├── scripts/
│ ├── download_solar_data.py ← fetches Energimyndigheten PxWeb API
│ └── download_geo.py ← downloads Sweden municipality GeoJSON
├── src/solar_mcp/
│ ├── server.py ← FastAPI + MCP (Streamable HTTP + SSE)
│ ├── tools/
│ │ ├── electricity_prices.py
│ │ ├── generation_forecast.py
│ │ ├── growth_ranking.py
│ │ ├── optimal_region.py
│ │ ├── solar_growth.py
│ │ ├── solar_map.py ← folium choropleth + Playwright screenshot
│ │ └── solar_revenue.py ← combined Nord Pool + SMHI analysis
│ ├── data/
│ │ ├── energimyndigheten.py ← parquet loader
│ │ └── smhi_client.py ← SMHI API client + 30-min TTL cache
│ └── utils/
│ ├── municipality_coords.py
│ └── solar_formula.py ← cloud-layer clearness, PVGIS PSH table
├── tests/ ← 44 tests, all passing
├── presentation/ ← Quarto slide deck
├── deploy/
│ ├── azure-deploy.sh ← first-time deploy
│ └── azure-update.sh ← redeploy after code changes
└── Dockerfile ← single-stage, includes Playwright Chromium (~1.2 GB)______________________________________________________________________
部署到Azure
# First-time deploy (creates resource group, ACR, Container App)
./deploy/azure-deploy.sh
# Redeploy after code changes
./deploy/azure-update.sh当前部署运行在 Azure容器应用 (瑞典中央),1个CPU/2Gi内存,至少1个复制品。
______________________________________________________________________
