MarvinDateMcp-日期上下文MCP服务器
模型上下文协议(MCP)服务器,为位置感知AI应用程序提供全面的数据上下文分析。用。NET 9,旨在帮助LLM在会话环境中理解日期。
生产就绪 具有企业级安全控制。
特性
- 位置感知日期分析:接受地名或POI(例如“迪拜”、“伦敦”、“哈利法塔”)
- 全面的日期背景:返回今天、明天、后天、本周、下周、即将到来的假期和关键日期
- 区域周末支持:处理不同的周末时间表(例如,阿联酋:周五至周六,英国:周六至周日)
- 银行假日:与Nager集成。公众假期API日期
- 时区处理:使用NodaTime进行精确的时区转换
- 缓存:Google API调用和假日数据的内存缓存
- HTTP传输:使用MCP HTTP传输进行远程访问
安全特性✅
- API密钥验证:所有MCP端点都需要X-API-Key标头
- 速率限制:每个IP地址每分钟100个请求
- Azure密钥库:使用托管身份安全存储秘密
- CORS限制:可配置的允许来源(无通配符)
- 安全标头:HSTS、CSP、X-Frame-Options、X-XSS-Protection
- 应用洞察:全面的记录和监测
- IP允许列表:可选的基于NSG的网络限制
- 仅限HTTPS:强制执行TLS 1.2+
看 安全.md 详细的安全架构。
设置
先决条件
- .NET 10 SDK
- 启用地理编码API和时区API的Google API密钥
本地开发
- 设置API密钥:
- 从获取Google API密钥 谷歌云控制台 - 启用地理编码API和时区API - 生成MCP API密钥: openssl rand -base64 32 - 创建 .env.local 在项目根目录中:
GOOGLE_API_KEY=your_google_api_key_here
MCP_API_KEY=your_generated_mcp_key_here- 构建项目:
dotnet build- 运行服务器:
dotnet run --project src/MarvinDateMcp.Api/MarvinDateMcp.Api.csproj服务器将于启动 http://localhost:5000 (或配置的端口)。
Azure部署
看 部署.md 获取全面的部署指南。
快速部署:
# Configure .env.local with API keys
cd terraform
.\deploy.ps1这将:
- 部署Azure基础架构(密钥库、应用服务、应用洞察)
- 构建和部署应用程序
- 运行验证测试
MCP工具
analyze_date_context
描述:分析位置的综合日期上下文。返回今天、明天、后天、本周、下周、即将到来的假期和关键日期。
认证:需要 X-API-Key 具有有效MCP API密钥的标头。
输入:
location(字符串,必填):地名、城市或POI(例如,“迪拜”、“伦敦”、“肯尼迪机场”)as_of_date(字符串,可选):在ISO 8601格式(例如“2026-02-15”)中用作所有计算的“今天”的日期。如果没有提供,则使用该位置时区中的当前日期。
示例请求:
curl -X POST https://YOUR_APP_SERVICE_URL/mcp \
-H "X-API-Key: your_mcp_api_key" \
-H "Content-Type: application/json" \
-H "Mcp-Session-Id: your_session_id" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "analyze_date_context",
"arguments": {
"location": "Dubai",
"as_of_date": "2026-02-15"
}
}
}'输出:包含全面日期信息的JSON:
{
"location": {
"resolvedName": "Dubai",
"formattedAddress": "Dubai, United Arab Emirates",
"countryCode": "AE",
"timezone": "Asia/Dubai",
"utcOffset": "+04:00",
"currentLocalTime": "2026-01-27T15:22:00"
},
"today": {
"date": "2026-01-27",
"dayOfWeek": "Tuesday",
"isWeekend": false,
"isHoliday": false,
"holidayName": null
},
"tomorrow": { ... },
"dayAfterTomorrow": { ... },
"thisWeek": {
"weekendDays": ["Friday", "Saturday"],
"weekendDates": ["2026-01-30", "2026-01-31"],
"remainingWorkdays": ["2026-01-28", "2026-01-29"]
},
"nextWeek": {
"monday": "2026-02-02",
"friday": "2026-02-06",
"weekendDates": ["2026-02-06", "2026-02-07"],
"workdays": ["2026-02-01", "2026-02-02", "2026-02-03", "2026-02-04", "2026-02-05"]
},
"upcomingHolidays": [
{ "date": "2026-02-10", "name": "Isra and Mi'raj", "dayOfWeek": "Tuesday" }
],
"keyDates": {
"nextMonday": "2026-02-02",
"nextTuesday": "2026-01-28",
"nextWednesday": "2026-01-29",
"nextThursday": "2026-01-30",
"nextFriday": "2026-01-31",
"nextSaturday": "2026-02-01",
"nextSunday": "2026-02-08",
"nextWeekend": { "start": "2026-01-30", "end": "2026-01-31" }
}
}用例
LLM可以使用此工具回答以下问题:
- “我明天可以参观吗?”
- “下周怎么样?”
- “后天?”
- “星期五怎么样?”
- “星期一是假日吗?”
- “下个周末是什么时候?”
周末规则
服务器支持特定位置的周末:
- 阿联酋、沙特阿拉伯、以色列、巴林、科威特、阿曼、卡塔尔:周五至周六
- 所有其他国家:周六至周日
建筑
- 谷歌地理编码服务:将地名解析为坐标、时区和国家代码
- 假期服务:从纳格尔那里度假。带缓存的日期API
- 周末服务:根据国家确定周末天数
- DateContextService:协调所有服务以建立全面的响应
- 日期上下文工具:向LLM公开服务的MCP工具
端点
/mcp-MCP服务器端点/health-健康检查端点/-简单的主页
技术
- .NET 9
- 模型上下文协议。AspNetCore 0.6.0-评测1
- NodaTime 3.2.2(时区处理)
- Serilog(日志记录)
- Polly(HTTP弹性)
- Azure密钥库(机密管理)
- Azure应用程序洞察(监控)
- 谷歌地理编码API和时区API
- 纳格。API日期(银行假日)
文档
许可证
麻省理工学院
