Presio

xyz.presioPublished by presio.xyzOfficial publisherv1.0.0Updated Nov 2, 2026

Present PDFs from the browser: upload to start a slideshow or validate Presio sidecars. No auth.

VerifiedStreamable HTTPWeb executableProductivity & WorkflowMedia & Design

Overview

AI-generated overview

Presio's hosted MCP server lets an assistant upload a PDF to start a browser-based slideshow, validate speaker-note and media sidecars, and read the plugin…

What you can do
  • Upload a PDF to start a local Presio presentation and get a URL to open in a browser, optionally replacing an existing deck via session_id and controller_token
  • Validate the speaker notes and media attachments embedded in a PDF
  • Read the guide for building Presio plugins, including the manifest and the window.presio API
When to use it
Useful when you want an assistant to turn a PDF into a presentable slideshow with controller and viewer windows, or to check that notes and media embedded in a deck are valid before presenting.
Requirements
A remote MCP endpoint at presio.xyz, reachable over HTTP; no authentication, environment variables or headers are declared. A browser is needed to open the returned presentation URL.
Before you install
Uploading a PDF sends the file to the hosted service; local presentations are kept for 7 days. Replacing an existing deck requires its session_id and controller_token, which act as access credentials and should not be shared casually.

Installation

In SourceWeft

  1. Open Presio in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/xyz.presio%2Fpresio/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "presio": {
      "type": "http",
      "url": "https://presio.xyz/mcp"
    }
  }
}

README

Presio

Present PDFs from your browser: a no-install alternative to Pympress. Try it at presio.ch or presio.xyz (use presio.ch if your institution blocks .xyz).

Plugins

Open a PDF, drive the slides from one browser window and show them in another. This repository is the source of the hosted service.

[Demo]

[How it works]

Features

  • Local by default: your PDF stays in the browser and works offline. Local presentations are kept for 7 days.
  • Controller + viewer: the viewer window mirrors the controller, in sync.
  • Present across devices: log in and sync to get a 6-character code. Viewers enter it on the home page and follow along live.
  • Shared control: give someone a passphrase to drive.
  • Speaker notes: shown next to the current and next slide, rendered as markdown.
  • Embedded media: videos, GIFs and YouTube/Vimeo, with playback synced to viewers.
  • Timer, a customizable layout and remappable shortcuts.
  • Plugins: add features such as polls or captions; see Plugins.
  • Agent APIs: an MCP server and a REST API; see Use it from an AI agent.

Adding videos and speaker notes

Any PDF works. For notes and media, use the official packages, or embed them by hand (see Embedding notes by hand):

Typst

typst
#import "@preview/presio:0.2.3": media, speaker-notes
= Introduction
Hello world.
#speaker-notes[  Remember to mention the demo before moving on.]
#media("https://www.youtube.com/watch?v=dQw4w9WgXcQ", width: 60%, aspect-ratio: 16/9)

LaTeX

[Open in Overleaf]

latex
\documentclass{beamer}\usepackage{presio}
\begin{document}
\begin{frame}{Introduction}  Hello world.  \presionote{Remember to mention the demo before moving on.}\end{frame}
\begin{frame}{The demo}  \presiomedia[width=0.7\linewidth]{https://www.youtube.com/watch?v=dQw4w9WgXcQ}\end{frame}
\end{document}

To install, copy presio.sty from the package repository next to your .tex file.

Embedding notes by hand

Presio reads speaker notes from JSON files attached to the PDF (Typst) or from note: link annotations (LaTeX).

Typst: define a helper and call it on each slide:

typst
#let speaker-notes(notes) = context {  // Page number keeps the attachment filename unique per slide  let page-num = counter(page).display()  let filename = "notes-slide-" + page-num + ".json"
  let json-string = json.encode((slide: page-num, notes: notes))
  pdf.attach(    filename,    bytes(json-string),    description: "Speaker notes for slide " + page-num,    mime-type: "application/json",  )}
#speaker-notes("Remember to mention the demo.")

LaTeX: use hyperref to create an invisible note: link:

latex
\usepackage{hyperref}
\newcommand{\speakernote}[1]{%  \href{note:#1}{\phantom{n}}%}
% Usage on a slide:\speakernote{Remember to mention the demo.}

Check the result at presio.ch/check, which reports whether the notes and media on each page are valid.

Plugins

Plugins add features such as live polls or closed captions. Browse them under the presio-plugin topic on GitHub and add one from Settings → Discover plugins.

To build your own, paste this prompt into Claude Code, Codex or Cursor:

text
Read https://presio.ch/plugins.md and build me a Presio plugin. Ask me what it should do first.

Use it from an AI agent

Agents can present and check PDFs over MCP or REST. Start at presio.ch/llms.txt. To add the MCP server to Claude Code:

bash
claude mcp add --transport http presio https://presio.ch/mcp

Self-hosting

For a full deployment (accounts, cross-device sync, your own domain) see deploy/README.md.

For a single offline container with no accounts or Supabase:

bash
docker run -d -p 3001:3001 -e PRESIO_MODE=local -e LOCAL_DATA_DIR=/data \  -e TRUST_PROXY=false -v presio-data:/data \  ghcr.io/potentialhedge/presio-local:1

:1 tracks the current major version, so it gets no breaking changes (see Versions and upgrading). See Running fully local / offline for what this mode includes.

Source: README.md at commit ccb1c13

Tools

3

present_pdf

Present a PDF

Upload a PDF to start a local Presio presentation. Returns a url — open it in a browser to finish handoff (skips share). To replace an existing presentation's deck instead of creating one, pass its session_id plus controller_token (the t= parameter of the url from the original create call) and the same link keeps working. Same as POST /api/present.

Parametersfilenamepdf_base64requiredsession_idcontroller_token

check_pdf

Check PDF sidecars

Validate Presio notes/media sidecar attachments in a PDF. Same as POST /api/check.

Parameterspdf_base64required

plugin_guide

How to build a Presio plugin

The guide to building a Presio plugin: the workflow (a presio-<name> GitHub repo from the template, the checker, a tag, and a ?plugins= link that loads it), the manifest, and the full window.presio API. Read it before writing a plugin. Same as GET /plugins.md.

Takes no parameters.

Version history

1
  1. v1.0.0LatestSep 16, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts