PresentonをAWSに構築するで立てた環境を、しばらく REST API から叩いていました。定例資料の自動生成にはそれで足りますが、「この議事録からスライドを作って」と会話の流れで頼みたい場面もあります。
Presenton には MCP サーバーが内蔵されていて、Claude Code のような MCP クライアントから直接スライドを作らせられます。
本記事では、その MCP エンドポイントに実際にプロトコルを喋らせて確かめた内容をまとめます。結論を先に書くと、READMEに載っているツール名は実機と一致しませんでした。
1. MCPサーバーは何をしてくれるのか
MCP(Model Context Protocol)は、AI クライアントに外部ツールを渡すための規格です。Presenton は /mcp にエンドポイントを持っていて、対応クライアントから「スライドを作る」という道具として呼べます。
REST API との違いは呼ぶ側です。REST は自分でスクリプトを書いて叩きますが、MCP なら AI が必要と判断したときに自分で呼びます。
| REST API | MCP | |
|---|---|---|
| 呼ぶ人 | 自分のスクリプト | AI クライアント |
| 向く用途 | 定例バッチ、既存システムへの組み込み | 会話の流れでの都度生成 |
| 認証 | sk-presenton-… の Bearer | 同じキーを使う |
MCP 関連の連載としては、以前 Claude CodeにMCP経由でNetBoxを接続する を書きました。そちらは読み取り専用のサーバーでしたが、今回は書き込む側、つまり作らせる用途になります。
2. 接続に必要なもの
用意するのは API キー1本だけです。管理画面の Admin → API keys で発行します。REST API と同じキーがそのまま使えます。
クライアント側の設定はこの形になります。Claude Code ならプロジェクト直下の .mcp.json に置きます。
{
"mcpServers": {
"presenton": {
"type": "http",
"url": "http://203.0.113.10/mcp",
"headers": {
"Authorization": "Bearer sk-presenton-XXXX"
}
}
}
}
キーは毎リクエストのヘッダーで送ります。 ブラウザのログインCookieは受け付けられません。REST と MCP で同じキーを使い回せるので、鍵の管理箇所は増えません。
なおキーには有効期限があり、既定は90日です。定常運用に組み込むなら、更新の段取りを先に決めておいたほうが安全です。
3. 実際に喋らせてみる
クライアントを立てる前に、プロトコルを直接叩いて生きているか確かめました。

最初は initialize です。
# セッションを開く。Accept に text/event-stream を含めるのが必須
curl -X POST http://203.0.113.10/mcp \
-H "Authorization: Bearer sk-presenton-XXXX" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize",
"params":{"protocolVersion":"2025-11-25","capabilities":{},
"clientInfo":{"name":"my-client","version":"1.0"}}}'
返ってきた応答がこれです。
{
"protocolVersion": "2025-11-25",
"capabilities": {
"prompts": {"listChanged": true},
"resources": {"subscribe": false, "listChanged": true},
"tools": {"listChanged": true}
},
"serverInfo": {"name": "Presenton API (OpenAPI)", "version": "3.2.4"}
}
押さえておく点が2つあります。
ひとつは応答が text/event-stream で返ることです。JSON がそのまま返ってくるわけではなく、data: 行に包まれた SSE 形式です。素の curl で見ると読みにくいので、クライアント側でパースが要ります。
もうひとつはレスポンスヘッダーの Mcp-Session-Id です。以降のリクエストにはこれを付けます。付け忘れると後続が通りません。
initialize のあとに notifications/initialized を送ります。これは通知なので id を付けません。 付けると仕様違反になります。
4. ツールは3つしかない
握手が済んだら tools/list を投げます。ここが本記事で一番の発見でした。

実機が返してきたのは3個だけです。
generate_presentation 同期で生成する
generate_presentation_async 非同期で生成する
get_presentation_generation_status 非同期の進捗を見る
一方 README には、start_smart_presentation / get_job_status / start_template_generation / upload_template_assets / upload_files といった名前が並んでいます。どれも実機には存在しませんでした。
理由は serverInfo に出ています。「Presenton API (OpenAPI)」という名前のとおり、この MCP サーバーは REST の OpenAPI 定義から機械的に生成されたラッパーです。README が説明しているのは別の実装か、別バージョンのものと考えられます。
ドキュメントを写してスクリプトを書くと動きません。 接続したら、まず tools/list を1回叩いて実際の名前を確かめてください。
引数は REST の生成エンドポイントとほぼ同じで、generate_presentation は14個を受け付けます。content だけが必須です。
content(必須) / slides_markdown / instructions / tone / verbosity
web_search / n_slides / language / template / include_table_of_contents
include_title_slide / files / export_as / trigger_webhook
最後の trigger_webhook は REST 側のパラメータ表には無かったものです。登録済みの Webhook を叩くかどうかを、呼び出しごとに選べます。
5. MCP経由で生成する
tools/call で実行します。
{
"jsonrpc": "2.0", "id": 3, "method": "tools/call",
"params": {
"name": "generate_presentation",
"arguments": {
"content": "情報システム部門のセキュリティ研修の案内",
"n_slides": 3, "language": "Japanese", "export_as": "pptx"
}
}
}
64.7秒で3枚が生成されました。 isError は false で、結果は structuredContent に入って返ります。
{
"presentation_id": "d0e05d6f-…",
"path": "/app_data/exports/users/…/….pptx",
"edit_path": "/presentation?id=d0e05d6f-…"
}
REST と同じく、返るのはファイル本体ではなくサーバー上のパスです。AI に「作って」と頼んだ結果として受け取れるのはこのパスなので、ファイルを手元に落とす経路は別に用意する必要があります。画面の編集URLを開いてダウンロードするか、サーバー側から取り出す仕組みを作ることになります。
同期版で1分前後かかるので、会話の途中で待たせたくないなら generate_presentation_async を使い、get_presentation_generation_status で進捗を見る形が向いています。
6. つまずきどころ
6.1 READMEのキー管理APIは存在しない
README は、キーの発行と失効に次のエンドポイントを使うと書いています。
POST /api/v1/admin/api-keys
GET /api/v1/admin/api-keys
POST /api/v1/admin/api-keys/{api_key_id}/revoke
稼働中のルートを列挙したところ、admin/api-keys は1本もありませんでした。 /api/v1/admin/ 配下にあるのは provider-settings と users だけです。
実機でキーを扱うのはこちらでした。
POST /api/v1/auth/token/create
GET /api/v1/auth/token/list
POST /api/v1/auth/token/revoke
ツール名と同じ構図です。MCPまわりのREADMEは、実装に追いついていないと考えて読むほうが安全です。
6.2 管理系はAPIキーでは呼べない
ついでに確かめたところ、GET /api/v1/admin/users は API キーでは403でした。
{"detail": "Admin browser session required"}
APIキーは発行したユーザーとして動くため、管理者のブラウザセッションが要る操作はできません。 MCP から利用者アカウントを払い出す、といった使い方は現状できません。
6.3 デスクトップ版ではMCPが使えない
Electron のデスクトップアプリでは MCP サーバーが無効になっています。認証が既定で切られているため、衝突を避けるための措置です。MCP を使うならサーバー構成(Docker)が前提になります。
7. まとめ
/mcpは MCP 2025-11-25 の Streamable HTTP。 応答はtext/event-streamで返り、Mcp-Session-Idを以降のリクエストに付ける- 認証はRESTと同じ
sk-presenton-…キー。 ブラウザのCookieは不可。既定90日で失効する - ツールは3個だけ。
generate_presentation/generate_presentation_async/get_presentation_generation_status - READMEのツール名とキー管理APIは実機に存在しない。
serverInfoが示すとおりRESTから機械生成されたラッパーで、接続したら必ずtools/listで確かめる - MCP経由の生成は3枚で64.7秒。返るのはファイルではなくパスなので、手元に落とす経路は別に用意する
- デスクトップ版ではMCPが無効
本記事の内容は検証環境(presenton-verify)で実際にプロトコルを往復させて確かめたものです。ただし、Claude Code の .mcp.json に登録して使う手順そのものは通していません(設定ファイルの形式はドキュメントに沿ったものです)。エンドポイント側が仕様どおりに応答することは確認済みなので、あとはクライアント側の登録だけになります。
会話の流れでスライドを作らせるという用途に、MCP はよく合います。ただドキュメントと実機の差が大きいので、組み込む前に tools/list で現物を確認してください。


コメント