# MCP Time Server

一个使用Golang实现的MCP（Model Context Protocol）服务器，提供获取当前系统时间和SSE（Server-Sent Events）实时时间流功能。

## 项目概述

这个服务器实现了自定义的MCP协议，允许客户端通过HTTP接口获取当前系统时间，并且支持通过SSE技术订阅实时时间更新流。服务器使用slog库进行日志记录，日志仅输出到控制台。

## 功能特性

- 提供获取当前系统时间的MCP工具（`get_current_time`）
- 支持自定义时间格式
- 实现SSE（Server-Sent Events）功能，提供实时时间流订阅（`subscribe_time_stream`）
- 使用slog进行结构化日志记录
- 基于HTTP实现MCP协议
- 提供健康检查接口
- 支持优雅关闭

## 目录结构

```
mcpTimeServer/
├── main.go      # 服务器主程序
├── go.mod       # Go模块定义
├── install.sh   # 安装脚本
└── README.md    # 项目说明文档
```

## 安装与配置

### 前提条件

- Go 1.21或更高版本

### 安装步骤

1. 克隆项目或进入项目目录

2. 运行安装脚本：
   ```bash
   chmod +x install.sh
   ./install.sh
   ```

   安装脚本会检查Go环境、安装依赖并编译项目。

## 使用方法

### 启动服务器

```bash
./mcp_time_server
```

服务器启动后，会在8080端口监听HTTP请求。

## API说明

### MCP协议接口

#### 提交MCP请求

- **URL**: `/mcp/v1/submit`
- **方法**: `POST`
- **Content-Type**: `application/json`

**请求体示例**: 
```json
{
  "data": {"format": "2006-01-02 15:04:05"}, // 可选参数
  "type": "get_current_time",
  "timestamp": 1699999999
}
```

#### 可用工具

1. **get_current_time**
   - **参数**: `format`（可选）- 时间格式字符串，使用Go的时间格式语法（如"2006-01-02 15:04:05"）
   - **返回结果**: 
     ```json
     {
       "current_time": "格式化的时间字符串",
       "timestamp": 时间戳（Unix时间，秒）
     }
     ```

2. **subscribe_time_stream**
   - **参数**: 
     - `interval`（可选）- 时间更新间隔（秒），默认为1秒
     - `format`（可选）- 时间格式字符串
   - **返回结果**: 
     ```json
     {
       "stream_id": "唯一的流标识符",
       "sse_url": "http://localhost:8080/sse",
       "interval": 更新间隔（秒）
     }
     ```

### SSE接口

- **URL**: `/sse`
- **方法**: `GET`
- **Content-Type**: `text/event-stream`

连接后，服务器会以指定的间隔发送时间更新事件。

### 健康检查接口

- **URL**: `/health`
- **方法**: `GET`
- **返回**: 状态码200表示服务器正常运行

## 测试方法

服务器启动后，可以使用以下方式测试：

1. **健康检查**: 
   ```bash
   curl http://localhost:8080/health
   ```

2. **获取当前时间**: 
   ```bash
   curl -X POST http://localhost:8080/mcp/v1/submit -H 'Content-Type: application/json' -d '{"data":{},"type":"get_current_time","timestamp":'$(date +%s)'}'
   ```

3. **使用自定义格式获取当前时间**: 
   ```bash
   curl -X POST http://localhost:8080/mcp/v1/submit -H 'Content-Type: application/json' -d '{"data":{"format":"2006-01-02 15:04:05"},"type":"get_current_time","timestamp":'$(date +%s)'}'
   ```

4. **订阅时间流**: 
   ```bash
   curl http://localhost:8080/sse
   ```
   或直接在浏览器中访问 `http://localhost:8080/sse`

## 依赖说明

- github.com/google/uuid v1.6.0：用于生成唯一标识符

## 注意事项

- 服务器默认监听在8080端口
- 日志仅输出到控制台，不会写入文件
- SSE连接会在客户端断开或服务器关闭时终止

## License

MIT