Miro MCP服务器
一个独立的模型上下文协议(MCP)服务器,使任何兼容MCP的LLM都能与Miro白板交互
先决条件
- Python 3.9或更高版本
- 具有客户端ID和客户端密码的Miro开发人员帐户
- MCP兼容LLM客户端
设置
- 克隆此存储库或导航到项目目录:
cd miro-mcp- 创建虚拟环境:
python -m venv venv
source venv/bin/activate- 安装依赖项:
pip install -r requirements.txt配置
- 创建一个
.env项目根目录中的文件,其中包含您的Miro凭据:
MIRO_CLIENT_ID=your_client_id_here
MIRO_CLIENT_SECRET=your_client_secret_here
MIRO_REDIRECT_URL=http://localhost:8080/callback可用工具
身份验证工具
get_auth_url:获取OAuth 2.0授权URL
- 参数:无 - 返回:授权URL和说明
exchange_auth_code:访问令牌的交换授权码
- 参数: - code (字符串,必填):来自OAuth回调的授权代码 - 返回:成功状态
董事会管理工具
get_board:获取Miro板的信息,包括元数据、名称、描述和设置
- 参数: - board_id (string,必填):板的ID - 返回:董事会信息
形状操纵工具
create_shape:在板上创建形状
- 参数: - board_id (string,必填):板的ID - shape_type (字符串,必填):形状类型(矩形、圆形、三角形、星形、箭头、菱形、八角形、六边形) - x (数字,必填):形状位置的X坐标 - y (数字,必填):形状位置的Y坐标 - width (数字,必填):形状的宽度 - height (数字,必填):形状的高度 - fillColor (字符串,可选):以十六进制格式填充颜色(例如#FF0000) - borderColor (字符串,可选):十六进制格式的边框颜色(例如#000000) - borderWidth (数字,可选):边框宽度(像素) - content (字符串,可选):要在形状中显示的文本内容 - 返回:创建的形状信息
update_shape:更新现有形状的属性
- 参数: - board_id (string,必填):板的ID - item_id (字符串,必填):要更新的形状项的ID - x (数字,可选):新的X坐标 - y (数字,可选):新的Y坐标 - width (数字,可选):新宽度 - height (数字,可选):新高度 - fillColor (字符串,可选):新填充颜色 - borderColor (字符串,可选):新边框颜色 - borderWidth (数字,可选):新边框宽度 - content (字符串,可选):新文本内容 - 返回:更新形状信息
delete_shape:从板中删除形状
- 参数: - board_id (string,必填):板的ID - item_id (string,必填):要删除的形状项的ID - 返回:成功消息
分组工具
group_shapes:将多个形状组合在一起
- 参数: - board_id (string,必填):板的ID - item_ids (数组,必填):要组合在一起的项目ID列表(至少2个项目) - 返回:组/帧信息
ungroup_shapes:通过从组/框架中删除形状来取消组合形状
- 参数: - board_id (string,必填):板的ID - group_id (string,必填):要取消分组的组/帧的ID - 返回:成功消息
用法
运行MCP服务器
MCP服务器使用JSON-RPC协议通过stdio进行通信。要运行它:
python server.py认证
在使用MCP服务器与Miro板交互之前,您需要进行身份验证并获取访问令牌:
步骤1:获取授权URL
打电话给 get_auth_url 用于检索OAuth授权URL的工具:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_auth_url",
"arguments": {}
}
}响应将包含 auth_url 您需要在浏览器中访问。
第二步:授权申请
- 复制
auth_url从回复中 - 在您的网络浏览器中打开它
- 登录您的Miro帐户
- 审查和批准应用程序请求的权限
- 授权后,Miro会将您重定向到配置中指定的回调URL
步骤3:提取授权码
授权后,Miro将重定向到您的回调URL,并使用 code 查询字符串中的参数。URL将如下所示:
http://localhost:8080/callback?code=AUTHORIZATION_CODE_HERE提取 code URL中的值(后面的所有内容 code=).
步骤4:访问令牌的交换代码
使用 exchange_auth_code 使用授权码完成身份验证的工具:
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "exchange_auth_code",
"arguments": {
"code": "AUTHORIZATION_CODE_HERE"
}
}
}MCP客户端配置示例
要与MCP兼容的客户端一起使用,请按如下方式配置服务器:
{
"mcpServers": {
"miro": {
"command": "python",
"args": ["/path/to/miro-mcp/server.py"],
"env": {
"MIRO_CLIENT_ID": "your_client_id",
"MIRO_CLIENT_SECRET": "your_client_secret",
"MIRO_REDIRECT_URL": "http://localhost:8080/callback"
}
}
}
}工具调用示例
以下是一些JSON-RPC请求示例:
列出可用工具:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list"
}获取董事会信息:
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "get_board",
"arguments": {
"board_id": "your_board_id"
}
}
}示例输出
存储库结构
miro-mcp/
├── server.py # Main MCP server entry point
├── miro_client.py # Miro API client wrapper
├── config.py # Configuration management
├── tool_registry.py # Tool registration system
├── requirements.txt # Python dependencies
├── README.md # This file
└── tools/ # Tool implementations
├── __init__.py
├── auth_tools.py # Authentication tools
├── board_tools.py # Board management tools
├── shape_tools.py # Shape manipulation tools
└── group_tools.py # Grouping tools