使用说明
谷歌日历MCP服务器
Google Calendar 的模型上下文协议 (MCP) 实现,可通过 CLI 或服务器发送事件 (SSE) 与日历事件进行交互。
功能
- 列出日历事件
- 创建新事件
- 临时事件存在
- 删除事件
- 查找可用时间
先决条件
- Node.js 18或更高级
- Google 帐户可访问 Google 日历 API
- Google Cloud Console OAuth 2.0 凭据
配置
-
复制文件
.env.example段落.env:cp .env.example .env -
在档案中设定 Google OAuth 2.0 凭据
.env:GOOGLE_CLIENT_ID=seu-client-id GOOGLE_CLIENT_SECRET=seu-client-secret GOOGLE_REDIRECT_URI=http://localhost:3000/oauth2callback GOOGLE_REFRESH_TOKEN=seu-refresh-token PORT=3334 -
安装依赖关系 :
npm install -
编译代码 :
npm run build
谎言
作为 HTTP/SSE 服务器运行
服务于HTTP/SSE:
npm run start:http
这将在指定端口启动服务器(默认:3334)。
可用的端点 :
GET /sse- 连接到 SSE 流POST /messages- 将信件发送到服务器
以 CLI (stdio) 运行
以 stdio 模式运行服务器作为 CLI 工具 :
npm run start:stdio
与 MCP 客户端集成
克劳德桌面
要将此服务器与 Claude Desktop 配合使用,请将以下设置添加到 Claude 配置文件:
没有MacOS:
code ~/Library/Application\ Support/Claude/claude_desktop_config.json
无窗口:
code %AppData%\Claude\claude_desktop_config.json
添加配置 :
{
"mcpServers": {
"google-calendar": {
"command": "node",
"args": [
"/caminho/absoluto/para/o/build/index.js"
],
"env": {
"GOOGLE_CLIENT_ID": "seu-client-id",
"GOOGLE_CLIENT_SECRET": "seu-client-secret",
"GOOGLE_REDIRECT_URI": "seu-redirect-uri",
"GOOGLE_REFRESH_TOKEN": "seu-refresh-token"
}
}
}
}
与其他 MCP 客户端集成
对于支持 SSE 通信的其他 MCP 客户端,请将其指向端点:
- SSE 端点:
http://localhost:3334/sse - 消息终结点:
http://localhost:3334/messages
可用工具
Google Calendar MCP 服务器提供以下工具:
list_事件
列出指定时间范围内的事件 。
{
"timeMin": "2023-09-01T00:00:00Z",
"timeMax": "2023-09-30T23:59:59Z",
"maxResults": 10
}
create_event
在日历中创建新事件 。
{
"summary": "Reunião importante",
"description": "Discussão sobre o projeto XYZ",
"startTime": "2023-09-15T14:00:00Z",
"endTime": "2023-09-15T15:00:00Z",
"attendees": ["pessoa1@exemplo.com", "pessoa2@exemplo.com"]
}
update_事件
更新已有事件 。
{
"eventId": "abc123xyz",
"summary": "Reunião atualizada",
"startTime": "2023-09-15T14:30:00Z",
"endTime": "2023-09-15T15:30:00Z"
}
删除事件
从日历中删除事件 。
{
"eventId": "abc123xyz"
}
find_free_time
查找时间范围内的可用时间。
{
"timeMin": "2023-09-01T00:00:00Z",
"timeMax": "2023-09-30T23:59:59Z",
"duration": 60
}
获取 Refresh Token
要从 Google 获取刷新令牌,您可以使用以下脚本:
const { google } = require('googleapis');
const http = require('http');
const url = require('url');
// Substituir com suas credenciais
const CLIENT_ID = 'seu-client-id';
const CLIENT_SECRET = 'seu-client-secret';
const REDIRECT_URI = 'http://localhost:3000/oauth2callback';
const oauth2Client = new google.auth.OAuth2(
CLIENT_ID,
CLIENT_SECRET,
REDIRECT_URI
);
const scopes = [
'https://www.googleapis.com/auth/calendar',
'https://www.googleapis.com/auth/calendar.events'
];
function getRefreshToken() {
const server = http.createServer(async (req, res) => {
const queryParams = url.parse(req.url, true).query;
if (queryParams.code) {
try {
const { tokens } = await oauth2Client.getToken(queryParams.code);
console.log('Refresh Token:', tokens.refresh_token);
res.end('Autenticação bem-sucedida! Você pode fechar esta janela.');
server.close();
} catch (error) {
console.error('Erro ao obter tokens:', error);
res.end('Falha na autenticação!');
}
}
}).listen(3000, () => {
const authUrl = oauth2Client.generateAuthUrl({
access_type: 'offline',
scope: scopes,
prompt: 'consent'
});
console.log('Acesse esta URL no navegador:');
console.log(authUrl);
});
}
getRefreshToken();
Salve este的剧本 getToken.js,执行-o-com node getToken.js然后按照说明获取您的刷新令牌。
开发
对于开发,您可以运行:
npm run dev
这将以观察模式编译TypeScript,允许您进行更改并实时查看结果。
解决问题
常见问题
-
Google 认证错误
- 请检查您的凭据是否正确
- 确认刷新令牌是否有效
- 确保所需的范围已启用
-
服务器未启动
- 检查是否设置了所有环境变量
- 确认构建过程是否成功
- 检查 build/index.js 文件的权限
-
SSE 连接失败
- 确认端口(默认为 3334)是否可用
- 检查日志是否有特定错误
- 确保端点设置正确
许可证
国际协调委员会