关于 Slideless
Slideless 是用于通过 MCP 主机管理 Slideless HTML 演示文稿的 MCP 服务。它提供上传、版本查看、共享、协作和市场列表工具,并支持 OAuth 或 API 密钥认证。
主要功能
- 01列出演示文稿和版本
- 02上传单文件或多文件演示文稿
- 03共享演示文稿并管理协作者
- 04浏览和发布市场列表
- 05支持 OAuth 和 API 密钥认证
适用场景
- 01从 MCP 主机上传 HTML 演示文稿
- 02查看演示文稿版本和文件内容
- 03共享演示文稿或邀请协作者
- 04查找或发布可混编的市场列表
MCP 相关
它将 Slideless HTTP API 封装为 MCP 工具,并通过 Streamable HTTP 端点提供服务。MCP 客户端可使用 OAuth 2.1 或静态 API 密钥进行认证。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://mcp.slideless.ai/mcpclaude mcp add --transport http ai-slideless https://mcp.slideless.ai/mcp{"mcpServers":{"ai-slideless":{"type":"http","url":"https://mcp.slideless.ai/mcp"}}}在 Cursor 中打开{"servers":{"ai-slideless":{"type":"http","url":"https://mcp.slideless.ai/mcp"}}}在 VS Code 中打开{"mcpServers":{"ai-slideless":{"type":"http","url":"https://mcp.slideless.ai/mcp"}}}{"mcpServers":{"ai-slideless":{"serverUrl":"https://mcp.slideless.ai/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
slideless-mcp
Slideless 的 MCP 服务。它将 Slideless HTTP API 封装为 Model Context Protocol 工具,让用户无需安装 slideless CLI,即可通过任意 MCP 宿主(Claude Desktop、claude.ai、ChatGPT desktop、Cursor 等)列出、分享、上传和管理 HTML 演示文稿。
托管在 Vercel(Next.js App Router + mcp-handler)上,地址为 https://mcp.slideless.ai/mcp。已列入官方 MCP 注册表,名称为 ai.slideless/mcp。
架构
无状态的 Next.js 路由处理程序,采用 streamable-HTTP 传输,不使用会话存储。每次调用 /mcp 时都会构建一个 McpServer,并将用户的 Authorization 标头原样转发至位于 europe-west1 的 Slideless Cloud Functions。没有数据库,也没有需要轮换的密钥——用户令牌不会离开请求。
Claude / ChatGPT → mcp.slideless.ai/mcp (Vercel / Next.js)
│
▼
europe-west1-slideless-ai.cloudfunctions.net
身份验证
该服务是 OAuth 2.1 资源服务器。它本身不托管身份验证流程,而是将 app.slideless.ai 声明为授权服务器,并将令牌转发至负责验证令牌的 Cloud Functions。服务接受两种标头格式,并会将其原样转发:
- OAuth(推荐)——支持 OAuth 的宿主(Claude Desktop、claude.ai)会自动发现流程:向
/mcp发送未经身份验证的请求会返回401,并附带指向/.well-known/oauth-protected-resource(RFC 9728)的WWW-Authenticate标头;该地址会指向app.slideless.ai。用户在浏览器中登录或注册并授权,无需粘贴密钥。授权服务器会在后台生成新的 API 密钥。 - 静态 API 密钥——支持自定义标头的宿主(Cursor、Claude Code)可以直接发送
Authorization: Bearer cko_…。
用作连接器
- 在 Claude Desktop / claude.ai / ChatGPT 中:添加自定义连接器,URL 为
https://mcp.slideless.ai/mcp。 - 宿主会发现 OAuth 并打开 Slideless 登录页面。授权后即可连接。
- (仅适用于使用静态密钥的宿主)在 https://app.slideless.ai → Settings → API Keys 获取
cko_…密钥,并将其设为Authorization标头。
工具
| 工具 | 功能 |
|---|---|
slideless_whoami | 身份检查——返回组织、密钥名称和权限范围 |
slideless_list_presentations | 列出自己拥有及受邀访问的演示文稿 |
slideless_get_presentation | 获取某个演示文稿的完整信息(令牌、协作者) |
slideless_list_versions | 列出演示文稿的版本历史 |
slideless_get_version | 获取指定版本的清单 |
slideless_download_version | 获取清单及内联文本文件内容(HTML/CSS/JS,每个文件最多 256 KB) |
slideless_upload_html_presentation | 上传单文件 HTML 演示文稿 |
slideless_upload_presentation_files | 上传多文件演示文稿(base64 数组) |
slideless_add_share_token | 生成公开查看链接 |
slideless_set_token_version_mode | 将令牌固定到某个版本或取消固定 |
slideless_unshare_presentation | 撤销一个或全部分享令牌 |
slideless_share_via_email | 通过电子邮件发送分享链接 |
slideless_invite_collaborator | 授予其他用户开发权限(发送电子邮件) |
slideless_uninvite_collaborator | 撤销协作者的权限 |
slideless_list_collaborators | 列出演示文稿的协作者 |
slideless_delete_presentation | 永久删除演示文稿 |
slideless_search_marketplace | 在公开市场中搜索可混编的演示文稿、应用和方案(无需密钥) |
slideless_get_marketplace_listing | 按 slug 获取某个市场条目的完整详情(无需密钥) |
slideless_remix_listing | 混编某个条目——返回清单及所有文本文件的内联内容(无需密钥) |
slideless_publish_listing | 将已推送的演示文稿发布到市场(需要 marketplace:publish 权限范围) |
slideless_star_listing | 代表已连接的用户为市场条目加星 |
slideless_unstar_listing | 移除已连接用户对某个条目的星标 |
本地开发
pnpm install
pnpm dev # next dev → http://localhost:8787
使用 MCP Inspector 测试:
npx @modelcontextprotocol/inspector
# Transport: Streamable HTTP
# URL: http://localhost:8787/mcp
# Header: Authorization: Bearer cko_<your-key>
或使用原始 curl(初始化握手):
curl -s http://localhost:8787/mcp -X POST \
-H "Content-Type: application/json" -H "Accept: application/json, text/event-stream" \
-H "Authorization: Bearer cko_<your-key>" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"probe","version":"0"}}}'
类型检查:pnpm typecheck。
部署
推送到 main 后,Vercel 会自动部署到生产环境(项目 codika/slideless-mcp)。手动部署:
vercel deploy --prod --scope codika
速率限制由 Vercel WAF 规则在边缘执行(通过 vercel firewall CLI 管理),匹配 path 以 /mcp 开头的请求:
mcp-per-ip→ 60 次请求 / 10 秒,按 IP 计数mcp-per-key→ 600 次请求 / 60 秒,按Authorization标头计数(因此每个 API 密钥 / OAuth 令牌都有独立的计数桶)
超过限制时,两者都会在函数运行前返回 429。使用以下命令重新创建:
vercel firewall rules add "mcp-per-ip" --condition '{"type":"path","op":"pre","value":"/mcp"}' \
--action rate_limit --rate-limit-window 10 --rate-limit-requests 60 --rate-limit-keys ip --yes
vercel firewall rules add "mcp-per-key" --condition '{"type":"path","op":"pre","value":"/mcp"}' \
--action rate_limit --rate-limit-window 60 --rate-limit-requests 600 --rate-limit-keys header:authorization --yes
vercel firewall publish --yes
源码布局
app/
├── layout.tsx # minimal root layout
├── page.tsx # landing page (/)
├── [transport]/route.ts # MCP endpoint (/mcp); per-request client + 401 challenge
└── .well-known/oauth-protected-resource/route.ts # RFC 9728 metadata → app.slideless.ai
src/
├── config.ts # base URL, server identity (SEP-973 branding), instructions
├── http.ts # OAuth metadata, CORS, 401 challenge builders
├── server.ts # registerAllTools entry point
├── slidelessClient.ts # typed fetch wrapper around the Cloud Functions
├── types.ts # wire shapes (mirrors slideless-app types/)
├── errors.ts # SlidelessApiError + wrapToolErrors
└── tools/
├── identity.ts # slideless_whoami
├── presentations.ts # list / get / versions / download / delete
├── upload.ts # upload_html / upload_files (3-step orchestration)
├── sharing.ts # tokens, version mode, unshare, email
├── collaborators.ts # invite / uninvite / list
└── marketplace.ts # search / get / remix / publish / star / unstar
server.json # MCP registry metadata (ai.slideless/mcp)
相关代码库
slideless-app— 此服务代理的后端 Cloud Functions(也承载 OAuth 2.1 授权服务器)slideless-cli— 使用同一 API 的 npm CLIslideless-plugin— Claude Code 插件(配套的创作与上传技能)
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。