Google日历MCP服务器

用于与Google Calendar集成的MCP服务器,支持ChatGPT应用通过OAuth进行认证和事件管理。

  • by oshinko
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 oshinko/google-calendar-mcp-server

使用说明

# 谷歌日历MCP服务器

是参照谷歌Calendar的MCP服务器。

用ChatGPT试试

本MCP服务器现在正在公开演示。URL如下。

https://app-6365ec52-2150-4db3-8e62-a55cbbb83eef.ingress.apprun.sakura.ne.jp

1.谷歌Cloud方面的准备

  1. 在谷歌Cloud上创建项目。
  2. 启用谷歌日历API。
  3. 转到API和服务,创建OAuth2.0客户端(web应用程序)。
  4. 已批准的重定向URI https://chatgpt.com/connector_platform_oauth_redirect 中所述修改相应参数的值。
  5. 保留已提交的客户机标识/客户机安全。

2.在ChatGPT侧注册应用程序

  1. 在ChatGPT中启用Developer mode(可能需要管理员权限)。
  2. Apps -> Create 中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。
  3. 在Endpoint中设置本服务器的URL。
  4. 选择“审计”以进行设置。
  5. 保存后,在草稿中测试工具枚举和审计登录。

正式文档

开発

准备

python3 -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt
cp .env.template .env

起动

dotenv run -- python app.py

默认情况下 http://127.0.0.1:5000 中所述修改相应参数的值。

用Docker启动

docker image build -t google-calendar-mcp-server .
docker container run --rm -p 80:80 --env-file .env google-calendar-mcp-server

在容器中以gunicorn(WSGI)启动。

.env 的,之 RESOURCE 请根据公开URL进行设定。

主要端点

  • POST / :MCP JSON-RPC端点
  • GET /.well-known/oauth-authorization-server
  • GET /.well-known/oauth-protected-resource
  • GET /oauth/authorize(ENABLE_AUTH_ENDPOINT_PROXY=true ),模板名称将采用不同的格式
  • POST /oauth/token(ENABLE_TOKEN_ENDPOINT_PROXY=true ),模板名称将采用不同的格式

工具

  • google_calendar_list
  • google_calendar_events

授权测试

在授权代码+PKCE流中获取令牌并将其保存到高速缓存JSON。范围是MCP服务器的 scopes_supported 来修改标记元素的显示属性。 .env 而需要与环境混合的每条反射光线,进行环境采样。

python scripts/test_oauth_authcode.py \
  --base-url http://127.0.0.1:5000 \
  --client-id YOUR_OAUTH_CLIENT_ID \
  --client-secret YOUR_OAUTH_CLIENT_SECRET \
  --redirect-uri http://127.0.0.1:8765/callback \
  --cache-file tmp/oauth_cache.json

请在浏览器中打开运行后显示的授权URL,粘贴重定向后的整个URL。

ChatGPT App连携时のHTTPS公开

作为ChatGPT的应用程序/连接器使用时,服务器必须在HTTPS上公开。 开发时是使用ngrok的前提。

ngrok起动例

在另一个终端上执行以下操作:。

ngrok http 5000 --url https://<your-ngrok-domain>.ngrok-free.app

.env设定例

通过ngrok使用时 .env 的,之 RESOURCE 请配合公开URL。

RESOURCE=https://<your-ngrok-domain>.ngrok-free.app

根据需要 APP_HOST=0.0.0.0 中所述修改相应参数的值。

默认情况下,授权服务器的代理无效。 仅在需要时 .env 中所述修改相应参数的值。

ENABLE_AUTH_ENDPOINT_PROXY=true
ENABLE_TOKEN_ENDPOINT_PROXY=true

offline_access和谷歌OAuth的注意事项

为了在ChatGPT的MCP应用程序中稳定刷新令牌运用,请通过许可请求 offline_access 能处理是很重要的。
本服务器是discovery metadata的 scopes_supported 的 offline_access 中所述修改相应参数的值。

另一方面,Google OAuth scope=offline_access 因为不能直接接受ENABLE_AUTH_ENDPOINT_PROXY=true 的情况下/oauth/authorize 在代理中 offline_access 删除 access_type=offline 将条目添加到文档注册表。

如果不使用这个转换,谷歌方面不会返还刷新令牌,每个访问令牌到期都需要重新认证。