README
🚀 EzanVakti MCP 服务器
EzanVakti MCP 服务器是一个用 C# 实现的模型上下文协议(MCP)服务器,用于从 EzanVakti API(Diyanet - 土耳其宗教事务局)获取伊斯兰教祈祷时间。
✨ 主要特性
- 国家列表:获取所有可用的国家。
- 城市搜索:查找某个国家内的城市。
- 地区查询:获取某个城市内的地区。
- 祈祷时间:检索任何地区的月度祈祷时间表。
- 智能搜索:通过名称搜索城市并获取其祈祷时间。
- 今日时间:获取当前日期的祈祷时间表。
🚀 快速开始
先决条件
- .NET 8.0 SDK 或更高版本。
- 兼容的 MCP 客户端(如带有 Copilot 的 VS Code、Claude Desktop 等)。
📦 安装指南
- 克隆或下载项目文件。
- 恢复依赖项:
dotnet restore - 构建项目:
dotnet build
运行服务器
开发环境:
dotnet run
生产环境:
dotnet publish -c Release
./bin/Release/net8.0/publish/EzanVakti.MCP.Server
📚 详细文档
MCP 客户端配置
VS Code 配置
在 .vscode/mcp.json 中添加以下内容:
{
"mcpServers": {
"ezanvakti": {
"command": "dotnet",
"args": ["run", "--project", "/path/to/EzanVakti.MCP.Server.csproj"],
"env": {}
}
}
}
Claude Desktop 配置
在 Claude Desktop 配置中添加以下内容:
{
"mcpServers": {
"ezanvakti": {
"command": "dotnet",
"args": ["run", "--project", "/path/to/EzanVakti.MCP.Server.csproj"]
}
}
}
可用工具
1. GetCountries
列出 EzanVakti 数据库中所有可用的国家。 用法:“Show me all countries with prayer times”
2. GetCities
获取特定国家的城市/省份。 参数:
countryId:国家 ID(例如,土耳其的 ID 为 "2") 用法:“Show me cities in Turkey”
3. GetDistricts
获取特定城市内的地区。 参数:
cityId:城市 ID(例如,伊斯坦布尔的 ID 为 "539") 用法:“Show me districts in Istanbul”
4. GetPrayerTimes
获取某个地区的完整月度祈祷时间表。 参数:
districtId:地区 ID 用法:“Get prayer times for district 9535”
5. SearchCityPrayerTimes
搜索城市并获取其祈祷时间。 参数:
cityName:要搜索的城市名称countryId:国家 ID(默认为土耳其的 "2") 用法:“Get prayer times for Istanbul”
6. GetTodayPrayerTimes
获取某个地区今日的祈祷时间。 参数:
districtId:地区 ID 用法:“What are today's prayer times for district 9535?”
祈祷时间数据结构
每个祈祷时间条目包括:
- 日期信息:伊斯兰历和公历日期。
- 祈祷时间:
Imsak:黎明前(晨礼时间)Gunes:日出Ogle:中午(晌礼)Ikindi:下午(晡礼)Aksam:傍晚(昏礼)Yatsi:夜晚(宵礼)
- 其他信息:
KibleSaati:朝向麦加的时间(太阳位于克尔白方向)GunesDogus/GunesBatis:精确的日出/日落时间
示例查询
以下是一些可以使用的自然语言查询:
- “What are the prayer times in Istanbul?”
- “Show me all cities in Turkey”
- “Get today's prayer schedule for Ankara”
- “Find districts in Izmir”
- “What time is Maghrib prayer in Istanbul today?”
Docker 支持
构建 Docker 镜像:
dotnet publish --os linux --arch x64 /t:PublishContainer
在容器中运行:
docker run -it ezanvakti-mcp-server:latest
API 速率限制
EzanVakti API 有以下限制:
- 每 5 分钟 30 个请求。
- 每天 200 个请求。
由于祈祷时间是按月提供的,通常每个地点每月只需要一个请求。
架构
此 MCP 服务器基于以下技术构建:
- ModelContextProtocol SDK:官方 C# 实现。
- HttpClient:用于与 API 进行通信,并进行了适当的资源释放。
- 依赖注入:实现了关注点的清晰分离。
- 日志记录:全面的错误跟踪。
- JSON 序列化:使用快速的 System.Text.Json。
🔧 技术细节
该 MCP 服务器运用 ModelContextProtocol SDK 官方 C# 实现,借助 HttpClient 与 EzanVakti API 通信,同时注重资源的合理释放。采用依赖注入模式,将不同功能模块的关注点分离,提高了代码的可维护性和可扩展性。使用 System.Text.Json 进行 JSON 序列化,保证了数据处理的高效性。日志记录功能则有助于全面跟踪和排查错误,确保系统的稳定性。
🤝 贡献指南
- 分叉仓库。
- 创建功能分支。
- 提交更改。
- 推送到分支。
- 创建拉取请求。
📄 许可证
本项目是开源的。EzanVakti API 由土耳其宗教事务局提供。
🛠️ 支持
如果遇到问题或有疑问:
- 查看日志以获取错误详细信息。
- 验证 API 连接性。
- 确保 MCP 客户端配置正确。
- 如果收到 429 错误,请检查速率限制。
Scan to join WeChat group