Google 日历 MCP 服务器
一个通过模型上下文协议(MCP)提供Google日历集成功能的FastMCP 2.0服务器。
特点/功能
- 列出即将举行的活动获取即将到来的日历事件,并可设置自定义限制
- 获取活动详情检索特定事件的详细信息
- 创建事件创建新的日历事件,包括参与者、地点和描述
- 搜索活动按关键词搜索活动
- 列出日历查看所有可访问的日历
- 日期范围查询获取特定日期范围内的事件
设置
- 安装依赖项:
pip install -r requirements.txt- 设置Google日历API:
- 前往 Google Cloud 控制台 - 创建一个新项目或选择一个现有项目 - 启用Google日历API - 配置OAuth同意屏幕 - 为桌面应用程序创建OAuth 2.0客户端ID凭据 - 下载凭据并保存为 credentials.json 在这个目录中
- 首次运行验证:
python calendar_mcp_server.py这将打开一个浏览器进行OAuth认证,并保存您的令牌。
运行服务器
本地(stdio 传输)
fastmcp run calendar_mcp_server.py:mcpHTTP传输
fastmcp run calendar_mcp_server.py:mcp --transport http --port 8000可用工具
list_upcoming_events
列出Google日历中的即将举行的活动。
max_results(int, 可选):最大事件数量(默认值:10)calendar_id(字符串,可选):日历ID(默认:“primary”)
get_event_details
获取特定事件的详细信息。
event_id(str): 事件的IDcalendar_id(str, 可选):日历ID(默认值:“primary”)
create_event
创建一个新的日历事件。
summary(str): 事件标题start_datetime(字符串): 开始时间,ISO格式end_datetime(str): ISO格式的结束时间description(字符串,可选):事件描述location(字符串,可选):事件地点attendees(List\[str\],可选):参会者电子邮件列表calendar_id(str,可选):日历ID(默认:“primary”)
search_events
按关键词搜索活动。
query(字符串): 搜索查询max_results(int, 可选): 最大结果数(默认:10)calendar_id(字符串,可选):日历ID(默认:“primary”)
list_calendars
列出所有可访问的日历。
get_events_in_date_range
获取特定日期范围内的事件。
start_date(str): 以ISO格式表示的开始日期end_date(字符串): 结束日期,采用ISO格式calendar_id(str, 可选): 日历ID(默认:“primary”)max_results(int, 可选): 最大结果数(默认:100)
认证
服务器使用OAuth 2.0与Google Calendar API进行身份验证。在首次调用API时,它将:
- 打开浏览器进行用户身份验证
- 保存访问令牌和刷新令牌至
token.json - 根据需要自动刷新令牌
所需文件
credentials.json从Google Cloud Console获取OAuth 2.0客户端凭据token.json首次认证后自动生成
客户端使用示例
import asyncio
from fastmcp import Client
async def main():
client = Client("http://localhost:8000/mcp")
async with client:
# List upcoming events
events = await client.call_tool("list_upcoming_events", {"max_results": 5})
print("Upcoming events:", events)
# Create a new event
new_event = await client.call_tool("create_event", {
"summary": "Team Meeting",
"start_datetime": "2024-01-15T14:00:00-08:00",
"end_datetime": "2024-01-15T15:00:00-08:00",
"description": "Weekly team sync",
"location": "Conference Room A"
})
print("Created event:", new_event)
asyncio.run(main())权限
服务器请求以下Google日历范围权限:
https://www.googleapis.com/auth/calendar.readonly读取日历数据https://www.googleapis.com/auth/calendar完整日历访问权限(用于创建活动)
错误处理
所有工具都包含错误处理功能,如果API调用失败,将在响应中返回错误信息。
