Miro Rust远程MCP服务器
用于Miro板操作的生产就绪模型上下文协议(MCP)服务器,内置于Rust中,具有OAuth2身份验证。使Claude AI能够以编程方式创建和管理Miro董事会,特别关注可视化敏捷的团队组织结构。
特性
- OAuth2身份验证:具有PKCE和CSRF保护的安全授权码流
- 自动令牌刷新:无缝令牌续订,无需用户干预
- 董事会运作:以编程方式列出和创建Miro板
- 视觉元素:创建便签、形状、文本和框架
- 项目管理:列出、更新和删除公告板项目(即将推出)
- 连接器:创建显示关系的样式化箭头和线条(即将推出)
- 小队可视化:快速敏捷团队结构可视化(即将推出)
关键差异
- 第一个启用OAuth2的Miro MCP:与使用静态令牌的现有TypeScript实现不同
- 防锈性能:内存安全、并发、快速
- 远程MCP:可通过HTTPS从Claude.ai web界面访问
- 生产准备就绪:AES-256-GCM令牌加密,全面的错误处理
先决条件
- Rust 1.70+(2021年版)
- Miro开发人员帐户
- OpenSSL(用于生成加密密钥)
设置
1.创建Miro OAuth2应用程序
- 访问https://developers.miro.com/
- 点击“您的应用”→ “创建新应用程序”
- 注意你的 客户端ID 和 客户端密钥
- 添加重定向URI:
http://localhost:3010/oauth/callback(用于地方发展)
2.配置应用程序
创建配置目录和文件:
# Create config directory
mkdir -p ~/.config/mcp/miro-rust
# Copy example config
cp config.example.json ~/.config/mcp/miro-rust/config.json
# Generate encryption key
openssl rand -hex 32
# Edit config.json with your credentials
nano ~/.config/mcp/miro-rust/config.json配置文件(~/.config/mcp/miro-rust/config.json):
{
"client_id": "your_client_id_here",
"client_secret": "your_client_secret_here",
"redirect_uri": "http://localhost:3010/oauth/callback",
"encryption_key": "output_from_openssl_rand_hex_32",
"port": 3010
}配置字段:
client_id:您的Miro OAuth2客户端ID(来自Miro开发者门户)client_secret:您的Miro OAuth2客户端密码(来自Miro开发者门户)redirect_uri:OAuth2回调URL(必须与Miro应用程序配置匹配)
- 发展: http://localhost:3010/oauth/callback - 生产: https://your-domain.com/oauth/callback
encryption_key:用于令牌加密的32字节十六进制字符串(使用生成openssl rand -hex 32)port:服务器端口(3010用于开发)
3.构建和运行
# Install dependencies and build
cargo build --release
# Run the server
cargo run --release
# Or run in development mode
cargo run4.启动OAuth流
MCP服务器将提供 start_auth 返回授权URL的工具。在浏览器中打开此URL以授权应用程序。
项目结构
miro-mcp-server/
├── src/
│ ├── auth/ # OAuth2 implementation
│ │ ├── oauth.rs # Authorization code flow with PKCE
│ │ ├── token_store.rs # AES-256-GCM encrypted token storage
│ │ └── types.rs # Authentication types and errors
│ ├── mcp/ # MCP protocol implementation
│ │ ├── server.rs # MCP server with rmcp framework
│ │ └── auth_handler.rs # OAuth callback handling
│ ├── miro/ # Miro API client
│ │ ├── client.rs # HTTP client with auto-refresh
│ │ └── types.rs # Miro API types (boards, items, etc.)
│ ├── config.rs # Environment configuration
│ ├── lib.rs # Library exports
│ └── main.rs # Entry point
├── planning/ # Agile planning artifacts
└── tests/ # Integration tests可用的MCP工具
董事会运作
list_boards:列出所有可访问的Miro板create_board:创建一个具有名称和描述的新板
视觉元素
create_sticky_note:使用自定义内容、位置和颜色创建便签create_shape:为组织结构创建形状(矩形、圆形、三角形)create_text:在板上创建文本元素create_frame:创建用于对相关内容进行分组的框架
即将推出
list_items:列出按类型筛选的板项update_item:动态更新项目属性delete_item:从板上移除物品create_connector:使用样式化的箭头/线条连接项目- 用于快速创建组织结构图的小队可视化工具
安全
- OAuth2安全:PKCE阻止授权码拦截,状态参数阻止CSRF
- 令牌加密:静态令牌的AES-256-GCM加密
- 秘密管理:从环境变量加载的所有凭据
- 无不安全代码:100%安全Rust,保证内存安全
- 全面的错误处理:结果类型贯穿始终,没有生产恐慌
发展
运行测试
# Run all tests
cargo test
# Run with output
cargo test -- --nocapture
# Run specific test
cargo test test_name代码质量
# Lint with clippy
cargo clippy -- -D warnings
# Format code
cargo fmt
# Check formatting
cargo fmt -- --checkGit工作流
此项目遵循Feature Branch工作流,使用原子提交:
# Create feature branch
git checkout -b feat/feature-name
# Make changes, run tests
cargo test && cargo clippy
# Commit (all commits reviewed for completeness)
git add .
git commit -m "feat: description of change"
# Merge to main
git checkout main
git merge feat/feature-name体系结构决策
为什么是Rust?
- 无垃圾回收的内存安全
- 通过tokio提供出色的异步/等待支持
- 强大的类型系统可以在编译时防止许多错误
- 生产部署的快速性能
为什么选择OAuth2与静态令牌?
- 更好的安全性(令牌可以撤销)
- 用户特定权限(每个用户单独授权)
- 自动刷新(无需手动续订令牌)
- Claude.ai web界面集成所需
为什么AES-256-GCM用于令牌存储?
- 经过身份验证的加密(机密性+完整性)
- 行业标准,经过良好审核
- 通过Rust高效
ring板条箱 - 防止令牌篡改
部署
地方发展
- 配置
~/.config/mcp/miro-rust/config.json具有localhost重定向URI - 跑
cargo run - OAuth回调在本地主机3010上工作
生产(需要HTTPS)
- 部署到Scaleway容器(或替代平台)
- 配置HTTPS/TLS证书
- 更新重定向URI
~/.config/mcp/miro-rust/config.jsonMiro开发者门户 - 使用部署
cargo build --release
生产服务器上的配置:
# On your production server
mkdir -p ~/.config/mcp/miro-rust
nano ~/.config/mcp/miro-rust/config.json
# Add your production configuration with HTTPS redirect URI:
# "redirect_uri": "https://your-domain.com/oauth/callback"推荐平台:
- Scaleway集装箱 (已选择):基于容器的部署、原生HTTPS、可预测的定价
- 铁路:部署简单,自动HTTPS,基于环境的配置
- 自托管:完全控制,需要Nginx用于HTTPS,手动配置管理
主要用例:敏捷小队可视化
示例提示克劳德:
“创建一个Miro板,显示3个敏捷小组(Alpha、Beta、Gamma)。每个小组有1个产品负责人、1个Scrum Master和5个开发人员。显示团队成员向Scrum Master的汇报关系。”
MCP服务器将:
- 创建新板
- 为每个小队创建框架
- 为团队成员创建颜色编码的便签(PO=黄色,SM=绿色,Dev=蓝色)
- 创建显示报告关系的连接器
- 返回板URL
通过自然语言在5分钟内完成!
API文档
米罗API v2
- 基本URL:
https://api.miro.com/v2/ - 认证:承载令牌(OAuth2)
- 速率限制:每个用户每分钟100个请求
- 文档: https://developers.miro.com/docs/rest-api-reference
MCP协议
- 规格说明: https://modelcontextprotocol.io/
- 运输:stdio(Claude.ai web界面)或HTTP
- 框架:rmcp(官方Rust SDK)
故障排除
“找不到配置文件”
- 确保配置目录存在:
mkdir -p ~/.config/mcp/miro-rust - 复制示例配置:
cp config.example.json ~/.config/mcp/miro-rust/config.json - 使用您的凭据编辑配置:
nano ~/.config/mcp/miro-rust/config.json
“身份验证失败”
- 检查
client_id和client_secret在~/.config/mcp/miro-rust/config.json - 验证
redirect_uri与Miro应用程序配置完全匹配 - 检查令牌尚未过期(应自动刷新)
“令牌加密失败”
- 确保
encryption_key正好是64个十六进制字符(32字节) - 生成新密钥:
openssl rand -hex 32 - 在中更新它
~/.config/mcp/miro-rust/config.json
“超出费率限制”
- Miro API限制:100次请求/分钟
- 等待60秒,然后重试
- 考虑对大型可视化进行批量操作
贡献
- 分叉存储库
- 创建特征分支(
git checkout -b feat/amazing-feature) - 遵循Rust约定(运行
cargo fmt和cargo clippy) - 为新功能编写测试
- 确保所有测试通过(
cargo test) - 以传统格式提交(
feat:,fix:,refactor:) - 推送并创建拉取请求
路线图
冲刺1(完成)✅
- \[x\] OAuth2授权与PKCE
- \[x\] 自动令牌刷新
- \[x\] 董事会列表和创建
- \[x\] 视觉元素创建(便签、形状、文本、框架)
Sprint 2(进行中)
- \[\]项目管理(列表、更新、删除)
- \[\]创建带有标题的连接器
- \[\]小队可视化编排
Sprint 3(计划中)
- \[\]批量操作以提高性能
- \[\]生产部署指南
- \[\]Claude.ai web界面集成测试
许可证
MIT许可证-有关详细信息,请参阅许可证文件
致谢
- Miro API v2,用于全面的板操作
- 用于AI原生工具集成的MCP协议
- 用于清洁MCP实现的rmcp-Rust SDK
- oauth2-rs用于健壮的oauth2客户端
- Claude Code开发平台的拟人化
支持
- 问题: https://github.com/yourusername/miro-rust-remote-mcp/issues
- Miro API文件: https://developers.miro.com/docs
- MCP规范: https://modelcontextprotocol.io/
______________________________________________________________________
内置于❤️ 在Rust中|由OAuth2提供技术支持|由AES-256-GCM保护
