内容
# 能源市场MCP
一个遵循模型上下文协议(MCP)的服务器,通过本地服务器公开意大利电力市场数据,实现与Claude和其他兼容MCP应用程序的无缝集成。
## 概述
该项目实现了一个MCP服务器,该服务器连接到**意大利能源市场运营商(GME)**的官方API,使程序化访问意大利电力市场的实时和历史数据成为可能,从而使市场数据易于集成到AI驱动的应用程序和工作流中。
## 功能
- **实时市场数据**:访问意大利电力市场的当前价格、交易量和市场状况
- **历史数据**:查询历史市场数据进行分析和报告
- **MCP集成**:完全兼容模型上下文协议,可与Claude和其他工具无缝集成
- **本地服务器**:作为本地MCP服务器运行,以确保隐私和性能
- **官方API**:基于GME(意大利能源市场运营商)的官方API构建
## 先决条件
- **Python**:3.12或更高版本
- **GME账户**:一个获得批准的GME账户,用于访问其官方API
- 联系GME请求API访问权限:https://www.mercatoelettrico.org/
- 您需要适当的凭证和API密钥
## 安装
该项目使用 **[uv](https://github.com/astral-sh/uv)** 进行快速、可靠的Python包管理。
### 安装前提条件
- **uv**:从 https://github.com/astral-sh/uv#installation 安装
```bash
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows (使用PowerShell)
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
```
### 设置步骤
1. 克隆仓库:
```bash
git clone <仓库网址>
cd mercati-energetici-mcp
```
2. 安装依赖项并创建虚拟环境:
```bash
uv sync
```
3. 激活虚拟环境:
```bash
source .venv/bin/activate # 在Windows上:.venv\Scripts\activate
```
就这样!`uv`会自动在`.venv/`中创建并管理虚拟环境。
## 配置
1. **设置GME凭证**:从GME获取您的API凭证
2. **配置凭证**:将您的GME凭证添加到环境或配置文件中
- 创建一个`.env`文件或使用环境变量设置您的凭证
- 需要的环境变量:
- `GME_USERNAME`:您的GME用户名
- `GME_PASSWORD`:您的GME密码
## 使用
### 运行MCP服务器
该MCP服务器使用 **stdio协议** 进行通信。启动服务器:
```bash
python main.py
```
服务器将初始化并使用MCP协议通过stdin/stdout等待连接。
### 与Claude Desktop配置
要将此MCP服务器与Claude Desktop一起使用,请将其添加到您的MCP配置文件中:
**Mac/Linux**:`~/.config/claude/claude_desktop_config.json`
**Windows**:`%APPDATA%\Claude\claude_desktop_config.json`
示例配置:
```json
{
"mcpServers": {
"mercati-energetici": {
"command": "uv",
"args": [
"run",
"--directory",
"/path/to/mercati-energetici-mcp",
"python",
"main.py"
],
"env": {
"GME_USERNAME": "您的GME用户名",
"GME_PASSWORD": "您的GME密码"
}
}
}
}
```
用您的安装路径替换`/path/to/mercati-energetici-mcp`,并添加您的GME凭证。
**注意**:使用`uv run`可确保自动使用正确的虚拟环境和依赖项。
### 与其他MCP客户端一起使用
对于其他兼容MCP的应用程序,请配置它们使用以下方式连接到此服务器:
- **协议**:stdio
- **命令**:`uv run --directory /path/to/mercati-energetici-mcp python main.py`
- **环境变量**:设置`GME_USERNAME`和`GME_PASSWORD`
## 可用的MCP工具
连接服务器后,您可以使用以下工具访问意大利电力市场数据:
### `get_prices`
获取特定日期和区域的欧元/兆瓦时的电价。
**参数:**
- `day`(可选):查询的日期,格式为YYYYMMDD。默认为今天。
- `zone`(可选):市场区域。支持的值有:`CALA`、`CNOR`、`CSUD`、`NORD`、`PUN`、`SARD`、`SICI`、`SUD`。默认为`PUN`(整个意大利)。
**返回:**一个字典,将小时(0-23)映射到欧元/兆瓦时的价格。
**在Claude中的示例用法:**
> "显示我今天西西里岛(SICI)的电价"
>
> "2024年4月10日的电价是多少?"
---
### `get_volumes`
获取特定日期和区域的购买和销售量。
**参数:**
- `day`(可选):查询的日期,格式为YYYYMMDD。默认为今天。
- `zone`(可选):市场区域。支持的值有:`CALA`、`CNOR`、`CSUD`、`NORD`、`SARD`、`SICI`、`SUD`、`TOTALE`。默认为`TOTALE`(整个意大利)。
**返回:**一对字典,将小时(0-23)映射到购买和销售量(兆瓦时)。
**在Claude中的示例用法:**
> "昨天北部区域的交易量是多少?"
---
### `get_liquidity`
获取特定日期的电力市场流动性百分比。
**参数:**
- `day`(可选):查询的日期,格式为YYYYMMDD。默认为今天。
**返回:**一个字典,将小时(0-23)映射到流动性百分比。
**在Claude中的示例用法:**
> "当前的市场流动性是多少?"
---
### `daily_pun`
获取特定日期的平均PUN(全国统一价格)。
**参数:**
- `day`(可选):查询的日期,格式为YYYYMMDD。默认为今天。
**返回:**欧元/兆瓦时的平均PUN价格。
**在Claude中的示例用法:**
> "今天的平均电价(PUN)是多少?"
>
> "显示我过去一周的PUN趋势"
---
### `get_zones`
获取所有可用市场区域的列表及其描述。
**参数:**无
**返回:**一个包含区域代码和描述的字典。包括:
- `PUN` - 全国统一价格(整个意大利)
- `NORD` - 意大利北部
- `CNOR` - 意大利中北部
- `CSUD` - 意大利中南部
- `SUD` - 意大利南部
- `SICI` - 西西里岛
- `SARD` - 萨丁尼亚岛
- `CALA` - 卡拉布里亚
- `TOTALE` - 总意大利(仅用于查询交易量)
**在Claude中的示例用法:**
> "所有可用的市场区域是什么?"
>
> "显示我电力市场区域列表"
## 架构
- 使用Python 3.12+构建
- 实现模型上下文协议规范
- 与GME官方API通信
- 设计用于本地部署,依赖项最少
## 项目结构
```
mercati-energetici-mcp/
├── main.py # MCP服务器入口点
├── pyproject.toml # 项目配置和依赖项
├── README.md # 本文件
└── .venv/ # 虚拟环境(在设置过程中创建)
```
## API功能
此MCP服务器可以提供访问:
- **日前市场(MGP)**:次日的电价和交易量
- **日内市场(MI)**:连续交易市场数据
- **平衡市场(MB)**:备用和平衡服务数据
- **市场统计**:历史趋势和分析
- **实时监控**:当前市场状况和状态
## 要求
- GME官方API访问权限(需要批准的账户)
- 有效的API凭证
- 连接到GME API端点的互联网连接
## 文档
有关以下内容的更多信息:
- **GME API**:访问 https://www.mercatoelettrico.org/
- **MCP协议**:访问 https://modelcontextprotocol.io/
- **意大利能源市场**:访问 https://www.terna.it/
## 限制
- 需要有效的GME账户和API凭证
- 受GME API速率限制和服务条款的约束
- 设计用于在批准的应用程序和工作流程中使用
## 支持
对于与以下内容相关的issues或问题:
- **API凭证**:直接联系GME
- **MCP集成**:参考模型上下文协议文档
- **此项目**:查看存储库issues或文档
## 许可证
该项目根据MIT许可证授权 - 有关详细信息,请参阅 [LICENSE](LICENSE) 文件。
## 免责声明
该项目提供访问通过官方API公开的可用市场数据的功能。用户负责遵守GME的服务条款和所有适用的意大利能源市场法规。