Slideless について
Slideless は、MCP ホストから Slideless の HTML プレゼンテーションを管理する MCP サーバーです。アップロード、バージョン確認、共有、共同作業、マーケットプレイスの操作に対応し、OAuth または API キーで認証します。
主な機能
- 01プレゼンテーションとバージョンの一覧
- 02単一・複数ファイルのデッキをアップロード
- 03共有と共同作業者の管理
- 04マーケットプレイスの閲覧と公開
- 05OAuth と API キー認証
活用シーン
- 01MCP ホストから 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 に転送して検証します。以下の2種類のヘッダースタイルを受け付け、どちらもそのまま転送します。
- OAuth(推奨) — OAuth に対応したホスト(Claude Desktop、claude.ai)は、フローを自動的に検出します。認証なしで
/mcpにリクエストすると、/.well-known/oauth-protected-resource(RFC 9728)を示すWWW-Authenticateヘッダーとともに401が返され、そこから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 | ID を確認します。組織、キー名、スコープを返します |
slideless_list_presentations | 所有するプレゼンテーションと招待されたプレゼンテーションを一覧表示します |
slideless_get_presentation | 1つのプレゼンテーションの全情報(トークン、コラボレーター)を取得します |
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 | 公開閲覧用 URL を発行します |
slideless_set_token_version_mode | トークンをバージョンに固定、または固定解除します |
slideless_unshare_presentation | 共有トークンを1つ、またはすべて無効にします |
slideless_share_via_email | 共有 URL をメールで送信します |
slideless_invite_collaborator | 別のユーザーに開発アクセス権を付与します(メールを送信します) |
slideless_uninvite_collaborator | コラボレーターの招待を取り消します |
slideless_list_collaborators | プレゼンテーションのコラボレーターを一覧表示します |
slideless_delete_presentation | プレゼンテーションを完全に削除します |
slideless_search_marketplace | リミックス可能なプレゼンテーション、アプリ、プランを公開マーケットプレイスで検索します(キー不要) |
slideless_get_marketplace_listing | スラッグを指定して、マーケットプレイスの出品1件の詳細を取得します(キー不要) |
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 req / 10s、IP をキーとして使用mcp-per-key→ 600 req / 60s、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 サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。