McpTimeTools
 
用于跨多个城市和时区进行当前和本地时间管理的模型上下文协议(MCP)服务器。
??概述
McpTimeTools是一个。NET 8 MCP服务器,提供时区感知时间实用程序。它支持检索全球各个城市的当前UTC时间和当地时间,并具有可扩展的架构,用于添加自定义城市时区映射。
?特点
- 当前UTC时间:获取UTC格式的当前时间
- 城市当地时间:检索预定义城市的当地时间
- 可扩展时区映射:添加或更新自定义城市时区映射
- 稳健的错误处理:用于清除错误诊断的自定义异常类型
- 类型安全:使用C#12和可以为null的引用类型构建
- 依赖注入:现代。支持DI的NET模式
- 经过全面测试:全面的单元测试覆盖率
默认支持的城市
- 坎昆 (
America/Cancun) - 墨西哥城 (
America/Mexico_City) - 纽约 (
America/New_York) - 伦敦 (
Europe/London) - 东京 (
Asia/Tokyo)
??入门
先决条件
- .NET 8 SDK 或以后
安装
克隆存储库:
git clone https://github.com/LouisGheysensCodit/McpTimeTools.git
cd McpTimeTools/src/McpTimeServer构建
dotnet build跑
dotnet run运行测试
dotnet test??使用方法
MCP工具
服务器公开了以下MCP工具:
GetCurrentTime
获取当前UTC时间。
退货:当前UTC时间 yyyy-MM-dd HH:mm:ss 格式
示例:
2024-01-15 14:30:45GetLocalTime
获取指定城市的本地时间。
参数:
city(string):城市名称
退货:带有城市名称、当地时间和时区ID的格式化字符串
示例:
Tokyo: 2024-01-15 23:30:45 (Asia/Tokyo)程序化使用
// Create a timezone provider
var timeZoneProvider = new TimeZoneProvider();
// Get timezone ID for a city
var timezoneId = timeZoneProvider.GetTimeZoneId("London");
// Returns: "Europe/London"
// Try to get timezone ID
if (timeZoneProvider.TryGetTimeZoneId("Paris", out var tz))
{
Console.WriteLine($"Timezone: {tz}");
}
// Add a custom city
timeZoneProvider.AddOrUpdateCity("Paris", "Europe/Paris");
// Get all available cities
var cities = timeZoneProvider.GetAvailableCities();GetAvailableCityNames
获取所有可用城市名称的逗号分隔列表。
参数:
sortOrder(CitySortOrder,可选):指定城市的排序方式。\
默认为 Alphabetical (A–Z)。可能值: - None --按插入顺序返回城市 - Alphabetical --升序(A-Z) - AlphabeticalDescending --下降(Z-A)
退货:\ 以逗号分隔的城市名称列表,或 "No cities configured." 如果不存在。
示例: 坎昆、伦敦、墨西哥城、纽约、东京
备注:
- 适用于轻量级的城市列表或填充客户端的下拉菜单。
- 投掷
InvalidCitySortOrderException如果提供了不受支持的排序顺序。
建筑
项目结构
McpTimeServer/
??? Program.cs # Application entry point
??? TimeTools.cs # MCP tool implementations
??? ITimeZoneProvider.cs # Timezone provider interface
??? TimeZoneProvider.cs # Timezone provider implementation
??? Exceptions/
? ??? TimeZoneException.cs # Base exception
? ??? InvalidCityException.cs # Invalid city name exception
? ??? InvalidTimeZoneIdException.cs # Invalid timezone ID exception
? ??? CityNotFoundException.cs # City not found exception
??? McpTimeServer.Tests/
??? TimeToolsTests.cs # TimeTools unit tests
??? TimeZoneProviderTests.cs # TimeZoneProvider unit tests关键组件
TimeTools:提供时间相关操作的MCP服务器工具类ITimeZoneProvider:时区映射操作界面TimeZoneProvider:默认使用预定义的城市- 自定义例外:特定于域的异常,以更好地处理错误
异常层次结构
Exception
??? TimeZoneException (abstract base)
??? InvalidCityException
??? InvalidTimeZoneIdException
??? CityNotFoundException
??? InvalidCitySortOrderException技术
- .NET 8:目标框架
- C#12:具有现代功能的语言版本
- 奥拉玛夏普。模型上下文协议:MCP服务器实现
- 微软。扩展。托管:托管基础设施
- x单位:测试框架
??测试
该项目包括全面的单元测试,包括:
- ?有效和无效的城市查找
- ?不区分大小写的城市匹配
- ?自定义异常情况
- ?可用城市检索
- ?城市地图更新
- ?边缘情况(null、空、空白)
测试覆盖率22次测试,全部通过?
??示例
自定义异常的错误处理
try
{
var tz = provider.GetTimeZoneId("InvalidCity");
}
catch (CityNotFoundException ex)
{
Console.WriteLine($"City '{ex.CityName}' not found!");
Console.WriteLine($"Available: {string.Join(", ", ex.AvailableCities)}");
}
catch (InvalidCityException ex)
{
Console.WriteLine($"Invalid city name: {ex.CityName}");
}添加自定义城市
var provider = new TimeZoneProvider();
// Add a new city
provider.AddOrUpdateCity("Berlin", "Europe/Berlin");
provider.AddOrUpdateCity("Sydney", "Australia/Sydney");
// Use the new cities
var berlinTime = provider.GetTimeZoneId("Berlin");??贡献
欢迎投稿!请随时提交拉取请求。
- 分叉存储库
- 创建功能分支(
git checkout -b feature/AmazingFeature) - 提交您的更改(
git commit -m 'Add some AmazingFeature') - 推到分支(
git push origin feature/AmazingFeature) - 打开拉取请求
作者
路易斯·盖森斯
- github: @LouisGheysensCodit
??致谢
- 内置 奥拉玛夏普。模型上下文协议
- 由...驱动 .NET 8
______________________________________________________________________
如果你觉得这个项目有用,请考虑给它一颗星!
