Presio
MCP serverWeb & browsingPresio lets your AI present PDFs as slideshows directly in the browser. Once added, you can upload a PDF to start a slideshow or check that Presio sidecar files are valid. No sign-in is required to use it.
No key or account is asked for. Not verified by us yet: Ahel has not run a call through it.
Then ask your AI: use the present pdf tool from Presio
Details
Available today. Use it as a step in a pipeline you build, or from your connected AI.
No key or account is asked for. Not verified by us yet: Ahel has not run a call through it.
After adding Presio, upload a PDF to start a slideshow, or share a Presio sidecar file to have it validated.
What your AI can do with it
- Start a slideshow from an uploaded PDF
- Present PDFs in the browser
- Validate Presio sidecar files
- Use it without signing in
Install Presio
The server’s own address, for the clients that take one directly. Or connect Ahel once and every client you use reads it from one address, with the account kept on Ahel rather than in each client’s config.
Claude Code
claude mcp add --transport http --scope user presio 'https://presio.xyz/mcp'Run it once in your project, then open /mcp to approve any sign-in the server asks for.
Claude Desktop
https://presio.xyz/mcpAdd a custom connector in Settings, paste this address, and approve the sign-in.
Cursor
cursor://anysphere.cursor-deeplink/mcp/install?name=presio&config=eyJ1cmwiOiJodHRwczovL3ByZXNpby54eXovbWNwIn0=Open the link and Cursor adds the server at that address.
ChatGPT
https://presio.xyz/mcpIn Settings, enable Developer mode, create an MCP app, and paste this address. Your plan and workspace must allow custom apps.
Codex
codex mcp add presio --url 'https://presio.xyz/mcp'Run it once, then sign in with codex mcp login presio if the server asks for an account.
From the project's README
As published by benedict-armstrong/presio in README.md.
Present PDFs from your browser. Try it at presio.ch or presio.xyz.
A modern no-install alternative to Pympress with more features!
Upload a PDF presentation, get a short link, and control the slideshow from one browser window while viewers watch in another. Presio is a hosted service; this repository is its source code.
If
.xyzdomains are blocked by your institution you can use presio.ch
Features
- Local by default — your PDF stays in the browser and is never uploaded. Works offline; local presentations are kept for up to 7 days.
- Controller + viewer — drive slides from the controller window while a viewer window mirrors it, kept perfectly in sync.
- Present across devices — log in and sync online to get a 6-character session code. Viewers enter it on the home page and follow along live over WebSockets.
- Shared control — hand out a controller passphrase to let someone else drive.
- Speaker notes — written next to your current and next slide, rendered as markdown.
- Embedded media — local videos and GIFs, direct video URLs, and YouTube/Vimeo. Playback, autoplay, and seeking all stay in sync with viewers.
- Presentation timer — track how long you've been talking.
- Customizable controller — rearrange the layout and remap keyboard shortcuts.
- Recent presentations — pick up where you left off from the home page.
- Download — anyone can grab the PDF from the presentation view.
- Agent APIs — MCP server and REST API for AI agents; see Use it from an AI agent.
Adding videos and speaker notes
Presio is agnostic to the typesetting engine used — any PDF works, and notes can also be embedded by hand from plain Typst or LaTeX (see Embedding notes by hand). Official packages are available for the two most common ones:
- Typst — presio-typst-package
- LaTeX — presio-latex-package
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
\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}
For LaTeX, copy presio.sty from the package repository next to your .tex file — that's the whole install.
Embedding notes by hand
Prefer not to use the packages? Presio reads speaker notes from JSON files
attached to the PDF (Typst) or from note: link annotations (LaTeX), and
renders them as markdown in the controller's notes panel.
Typst — define a helper and call it on each slide:
#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:
\usepackage{hyperref}
\newcommand{\speakernote}[1]{%
\href{note:#1}{\phantom{n}}%
}
% Usage on a slide:
\speakernote{Remember to mention the demo.}
Validate what you produced at presio.ch/check — it shows per-page thumbnails and reports whether the notes and media sidecars are valid.
Self-hosting
Want to run Presio yourself instead of using the hosted service? For a full
deployment (accounts, cross-device sync, your own domain) see
deploy/README.md.
For a single offline container with no accounts and no Supabase — just present PDFs on your own machine or LAN — nothing needs building:
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/benedict-armstrong/presio-local:1
The :1 tag tracks the current major release line — fixes and features, no
breaking changes. See Versions and upgrading.
See "Running fully local / offline" for what this mode does and doesn't include.
Tools it offers (2)
What this server listed when Ahel dialed its public endpoint in Oct 2026, with no key and no account of yours. The names are the server’s own.
present_pdfcheck_pdf
Signals
- GitHub stars
- 35
- Forks
- 5
- Last commit
- Oct 2026
Advanced
- Delivery
- presio MCP server → your Ahel connector (mcp.ahel.ai) → your AI.
- Item type
- mcp-server
- Key
xyz-presio-presio- Source
- github.com/benedict-armstrong/presio
- Hosted endpoint
https://presio.xyz/mcp
github.com/benedict-armstrong/presio
More in Web & browsing
MCP server · firecrawl
More in Web & browsingapify-mcp-server
MCP server · apify
More in Web & browsingBrowserbase
MCP server · browserbase
More in Web & browsinginspo
MCP server · nutlope
More in Web & browsingoya-browser
MCP server · oyadotai
More in Web & browsingplaywright-mcp
MCP server · microsoft
More in Web & browsing