日历集成服务

一个通过Model Context Protocol (MCP)提供Google Calendar集成的FastMCP 2.0服务器,支持事件列表、详情获取、创建、搜索等功能。

  • by olympos-ai
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 olympos-ai/google_calendar_mcp_server_fastmcp

使用说明

Google 日历 MCP 服务器

一个通过模型上下文协议(MCP)提供Google日历集成功能的FastMCP 2.0服务器。

特点/功能

  • 列出即将举行的活动获取即将到来的日历事件,并可设置自定义限制
  • 获取活动详情检索特定事件的详细信息
  • 创建事件创建新的日历事件,包括参与者、地点和描述
  • 搜索活动按关键词搜索活动
  • 列出日历查看所有可访问的日历
  • 日期范围查询获取特定日期范围内的事件

设置

  1. 安装依赖项:

    pip install -r requirements.txt
    
  2. 设置Google日历API:

    • 前往 Google Cloud 控制台
    • 创建一个新项目或选择一个现有项目
    • 启用Google日历API
    • 配置OAuth同意屏幕
    • 为桌面应用程序创建OAuth 2.0客户端ID凭据
    • 下载凭据并保存为 credentials.json 在这个目录中
  3. 首次运行验证:

    python calendar_mcp_server.py
    

    这将打开一个浏览器进行OAuth认证,并保存您的令牌。

运行服务器

本地(stdio 传输)

fastmcp run calendar_mcp_server.py:mcp

HTTP传输

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): 事件的ID
  • calendar_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时,它将:

  1. 打开浏览器进行用户身份验证
  2. 保存访问令牌和刷新令牌至 token.json
  3. 根据需要自动刷新令牌

所需文件

  • 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调用失败,将在响应中返回错误信息。