Penpot MCP服务器-F#版🎨🤖
Penpot模型上下文协议(MCP)服务器的功能性F#实现,使Claude等AI模型能够与Penpot设计进行交互。
概述
这是Python的惯用F#函数式编程转换 微型计算机 项目。它使用F#的强类型系统、不可变数据结构和函数式编程范式提供相同的功能。
特性
- ✅ 列出项目和文件:浏览Penpot项目和设计文件
- ✅ 文件检索:使用缓存获取完整的文件数据
- ✅ 对象树导航:通过字段选择遍历设计层次结构
- ✅ 搜索:使用正则表达式模式按名称查找对象
- ✅ 图像导出:将设计导出为PNG/SVG
- ✅ HTTP服务器:用于提供导出图像的可选HTTP服务器
- ✅ 缓存:内存中基于TTL的缓存以提高性能
- ✅ 错误处理:全面的错误处理,包括CloudFlare检测
建筑
该项目按照F#最佳实践分为功能模块:
- 配置.fs:使用纯函数的基于环境的配置
- 缓存.fs:支持TTL的通用内存缓存
- HttpServer.fs:用于图像传递的基于Suave的HTTP服务器
- PenpotApi.fs:Penpot API的HTTP客户端,具有异步操作
- 彭波特树.fs:函数树遍历和操作
- McpServer.fs:MCP工具实现
- 程序.fs:入口点和命令行界面
先决条件
- .NET 9.0 SDK 或以后
- A. 佩普特 账户
- Penpot API凭证(电子邮件和密码)
安装
1.克隆存储库
git clone
cd FnPenpotMCP2.配置环境变量
复制示例环境文件:
cp .env.example .env编辑 .env 使用您的Penpot凭据:
PENPOT_USERNAME=your-email@example.com
PENPOT_PASSWORD=your-password3.恢复依赖关系
dotnet restore4.建设项目
dotnet build用法
运行服务器
dotnet run命令行选项
dotnet run -- --mode stdio
dotnet run -- --mode sse --port 5000
dotnet run -- --debug配置选项
| 变量 | 默认值 | 描述 |
|---|---|---|
PENPOT_API_URL | https://design.penpot.app/api | Penpot API终点 |
PENPOT_USERNAME | (必填) | 您的Penpot电子邮件 |
PENPOT_PASSWORD | (必填) | 您的Penpot密码 |
DEBUG | true | 启用调试日志记录 |
ENABLE_HTTP_SERVER | true | 为图像启用HTTP服务器 |
HTTP_SERVER_HOST | localhost | HTTP服务器主机 |
HTTP_SERVER_PORT | 0 | HTTP服务器端口(0=随机) |
RESOURCES_AS_TOOLS | true | 将资源作为工具公开 |
MODE | stdio | MCP模式(stdio或sse) |
可用工具
项目管理
- list_项目:检索所有可用的Penpot项目
- get_project_files:获取特定项目中的所有文件
文件操作
- 获取文件:按ID检索文件(带缓存)
- 搜索对象:使用正则表达式按名称搜索对象
设计输出
- 导出对象:将设计对象导出为图像(PNG/SVG)
- get_object_tree:使用屏幕截图获取对象树结构
资源
- get_server_info:服务器状态和配置
- get_cached_files:列出缓存文件
- 获取_提交_组件:检索渲染的组件
- get_penpot_schema:Penpot API架构
- get_penpot_tree_schema:对象树架构
函数式编程特性
此F#实现展示了:
- 不可变数据:默认情况下,所有数据结构都是不可变的
- 选项类型:使用空安全操作
Option - 结果类型:显式错误处理
Result - 异步工作流:带F#异步的非阻塞I/O
- 模式匹配:控制流的详尽模式匹配
- 类型安全:贯穿始终的强打字和类型推理
- 功能组成:小型可组合功能
- 基于表达式:Everything是一个返回值的表达式
项目结构
FnPenpotMCP/
├── Config.fs # Configuration management
├── Cache.fs # TTL-based caching
├── HttpServer.fs # Image HTTP server (Suave)
├── PenpotApi.fs # Penpot API client
├── PenpotTree.fs # Tree traversal logic
├── McpServer.fs # MCP tool implementations
├── Program.fs # Entry point
├── resources/
│ ├── penpot-schema.json
│ └── penpot-tree-schema.json
├── .env.example # Environment template
├── FnPenpotMCP.fsproj # Project file
└── README.md # This file依赖项
- FSharp。数据:HTTP请求和数据访问
- FSharp。SystemTextJson:JSON序列化
- Dotnetease:环境变量管理
- 柔和的:轻量级web服务器
- 模型上下文协议:MCP SDK(预览版)
CloudFlare防护
如果您遇到CloudFlare保护错误:
- 打开https://design.penpot.app在浏览器中
- 登录您的Penpot帐户
- 完成任何CloudFlare验证挑战
- 请重试您的请求
验证通常持续一段时间。
发展
建筑
dotnet build运行测试(如果可用)
dotnet test出版
dotnet publish ./FnPenpotMCP.fsproj -c Release -o ./publish你需要更新吗 .env 出版前?
简短的回答:没有。
- 发布步骤将编译后的应用程序及其运行时依赖项捆绑在一起。它不读取、嵌入或要求您
.env文件。 - 环境值仅在运行时应用程序启动时读取。改变
.env永远不需要重建或重新发布。
是一个 .env 发布的二进制文件需要什么文件才能工作?
不需要,但支持。
此应用程序在启动时按以下顺序加载配置:
- 操作系统/进程环境提供的标准环境变量。
- 可选地,a
.env当前工作目录中的文件(通过DotNetEnv).如果没有.env它存在,只是被忽略了。
因此,在生产中,您有两个选择:
- 建议:通过流程管理器或宿主环境(例如systemd)设置所需变量
Environment=,Docker-e标志、Kubernetes机密、云服务环境设置)。 - 备选方案:放置a
.env运行二进制文件旁边的文件,并确保进程工作目录与包含.env文件。
成功Penpot身份验证所需的变量:
PENPOT_USERNAMEPENPOT_PASSWORD
其他可选变量列在上面的配置选项表中。
安全注意事项:
- 永不承诺
.env版本控制。 - 更喜欢秘密管理器或主机提供的环境变量
.env生产中的文件。
与Python版本的差异
在保持功能奇偶性的同时,此F#版本包括:
- 类型安全:编译时类型检查可防止许多运行时错误
- 不可变性:默认情况下,数据结构是不可变的
- 模式匹配:更清洁的控制流程,完美匹配
- 异步工作流:本机F#异步,而不是Python异步
- 选项类型:显式处理可为null的值
- 结果类型:在适当的情况下,无异常的显式错误处理
局限性
- 完整的MCP协议集成需要使用ModelContextProtocol进行额外的实现。NET SDK
- 与Python版本相比,YAML输出支持简化(使用JSON并注明)
- 一些高级Python特定功能在实现上可能有所不同
贡献
欢迎投稿!请随时提交问题或拉取请求。
许可证
本项目根据GNU Affero通用公共许可证v3.0(AGPL-3.0)获得许可。
这是Python项目的衍生作品 微型计算机,最初是根据麻省理工学院许可证获得许可的。根据MIT许可证的许可条款,此衍生作品已根据AGPL-3.0重新许可,以确保所有用户都可以自由使用任何进一步的修改和增强。
有关完整详细信息,请参阅LICENSE文件。
集成指南
了解如何将此MCP服务器与不同工具集成:
- LM工作室集成 -在任何平台上与LM Studio集成的一般指南
- Linux Mint上的LM Studio -专为Linux Mint用户提供的初学者友好指南(包括TLDR和详细说明)
- JetBrains Rider/Junie集成 -JetBrains Rider和Junie AI助手使用指南
另请参见:
