crepe-mcp
An MCP server that turns an AI agent into a slide author, enabling drafting decks in Pandoc Markdown, compiling to PDF or PowerPoint, validating with PNG exports, and pulling in research from the web, Wikipedia, and Semantic Scholar.
README
CREPE — Compile, Research, Export, Presentation Engine
An MCP server for Goose that turns an AI agent into a capable slide author: draft decks in Pandoc Markdown, compile to Beamer PDF or PowerPoint, validate visually with PNG exports, and pull in research from the web, Wikipedia and Semantic Scholar.
Tools (12 total)
Presentation (stateful)
| Tool | Purpose |
|---|---|
create_presentation |
Start a new deck, set all metadata |
get_presentation |
Inspect metadata + slide list |
get_slide |
Read a single slide's full content |
set_slide |
Add or replace a slide (index < len → replace, else append) |
compile_presentation |
Compile to PDF (Beamer/lualatex) or PPTX (pandoc) |
render_slides_as_pngs |
Render compiled artifact to PNG sequence for validation |
cleanup_presentation |
Delete a presentation's in-memory state and on-disk scratch dir |
Research & utilities
| Tool | Purpose |
|---|---|
academic_search |
Semantic Scholar (no key needed) |
web_search |
Tavily API web search |
wikipedia_search |
Wikipedia article search |
wikipedia_read |
Full Wikipedia article text |
fetch_webpage |
Extract text from any URL (headless browser or urllib) |
Installation
# From PyPI (once published)
uv tool install crepe-mcp
# From source
git clone https://github.com/mariolpantunes/crepe-mcp
cd crepe-mcp
uv tool install .
System requirements
- pandoc — slide compilation
- lualatex — PDF/Beamer output (
texlive-fullor MacTeX) - pymupdf — PDF→PNG rendering (installed via pip, no system dep)
- PPTX→PNG rendering — platform-dependent:
- Linux: LibreOffice is required (native
soffice/libreofficeon PATH, or installed as a Flatpak —flatpak install flathub org.libreoffice.LibreOffice, auto-detected at runtime, no config needed). There is no fallback on Linux: aspose-slides' embedded .NET runtime dynamically loadslibssl.so.1.1, which distros that ship only OpenSSL 3 (Slackware, recent Arch, etc.) no longer have, and no newer aspose-slides release has moved off it. Without LibreOffice,render_slides_as_pngs(format="pptx") returns a clean error instead of a crash. - macOS (and other platforms): LibreOffice is preferred if found (native
binary or
/Applications/LibreOffice.app); otherwise falls back to aspose-slides (installed via pip — no OpenSSL 1.1 issue on macOS). Aspose is a commercial library; withoutCREPE_ASPOSE_LICENSE_PATHit runs in evaluation mode and watermarks output PNGs.
- Linux: LibreOffice is required (native
Environment variables
All variables are prefixed with CREPE_ to avoid collisions.
| Variable | Required | Purpose |
|---|---|---|
CREPE_TAVILY_API_KEY |
No | Enables web_search via Tavily; graceful warning if absent |
CREPE_HEADLESS_BROWSER_PATH |
No | Path to Chromium-compatible browser for fetch_webpage. See macOS Browser Paths below. Falls back to urllib if unset. |
CREPE_LIBREOFFICE_PATH |
No | Path to a soffice/libreoffice executable, overriding auto-detection. Required on Linux only if auto-detection (PATH, Flatpak) fails. |
CREPE_ASPOSE_LICENSE_PATH |
No | Path to Aspose .lic file for watermark-free PPTX→PNG export on the aspose fallback path (macOS/other, when LibreOffice isn't found). Evaluation mode (with watermarks) is used if unset. |
macOS & Headless Browser Setup
To enable JavaScript-rendered webpage fetching via fetch_webpage on macOS, set CREPE_HEADLESS_BROWSER_PATH to any Chromium-based browser application path:
- Google Chrome:
/Applications/Google Chrome.app/Contents/MacOS/Google Chrome - Brave Browser:
/Applications/Brave Browser.app/Contents/MacOS/Brave Browser - Microsoft Edge:
/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge
Note on Safari: Apple's native Safari (
safaridriver) does not support CLI--headlessmode for DOM dumping (--dump-dom). If you only have Safari installed or choose not to setCREPE_HEADLESS_BROWSER_PATH,fetch_webpageautomatically falls back to pure Pythonurllib+ HTML stripping, which works instantaneously for all static articles, documentation, and Wikipedia pages.
Goose integration
You can automate this entire configuration using our built-in interactive setup script:
# Auto-detect browsers/keys, export profile variables, and register in ~/.config/goose/config.yaml
./setup.py --install
# To remove and clean up later:
./setup.py --uninstall
Alternatively, you can add crepe-mcp manually to ~/.config/goose/config.yaml using one of the options below.
Use envs (literal values), not env_keys. Goose resolves every env_keys
entry against its own keyring/secrets store — it does not fall back to a
plain shell environment variable of the same name. All of CREPE's env vars are
optional, and declaring one under env_keys without a matching Goose secret
makes the whole extension fail to start with Failed to fetch secret ... not found. Only fill in the values you actually need (all are optional; omit any
you don't use):
Option 1: Run directly from your local clone (Recommended for testing)
If you cloned the repository locally (e.g. to ~/git/crepe-mcp), you can tell Goose to execute it directly via uv run without installing it globally:
extensions:
crepe:
name: crepe
type: stdio
cmd: uv
args: ["--directory", "/home/username/git/crepe-mcp", "run", "crepe-mcp"]
envs:
CREPE_TAVILY_API_KEY: ""
CREPE_HEADLESS_BROWSER_PATH: ""
CREPE_ASPOSE_LICENSE_PATH: ""
CREPE_LIBREOFFICE_PATH: ""
(Replace /home/username/git/crepe-mcp with your actual absolute path to the repository).
Option 2: Run as an installed tool (uv tool install .)
If you ran uv tool install . inside the project directory (or installed via pip), crepe-mcp is on your PATH:
extensions:
crepe:
name: crepe
type: stdio
cmd: crepe-mcp
args: []
envs:
CREPE_TAVILY_API_KEY: ""
CREPE_HEADLESS_BROWSER_PATH: ""
CREPE_ASPOSE_LICENSE_PATH: ""
CREPE_LIBREOFFICE_PATH: ""
Option 3: Run ephemerally via uvx (Once published to PyPI)
If running directly from PyPI without local installation:
extensions:
crepe:
name: crepe
type: stdio
cmd: uvx
args: ["crepe-mcp"]
envs:
CREPE_TAVILY_API_KEY: ""
CREPE_HEADLESS_BROWSER_PATH: ""
CREPE_ASPOSE_LICENSE_PATH: ""
CREPE_LIBREOFFICE_PATH: ""
Option 4: Add via Goose CLI (goose configure)
If you prefer Goose's interactive terminal setup instead of editing config.yaml:
- Run
goose configurein your terminal. - Select
Add Extension→Command-line Extension (stdio). - For Name, enter:
crepe - For Command, enter either:
crepe-mcp(if installed globally)- OR
uv --directory /path/to/crepe-mcp run crepe-mcp(for local repo)
- When prompted for environment variables, add them as literal values
(
CREPE_TAVILY_API_KEY, etc.) — all are optional, so only add the ones you use. Ifgoose configureonly offers a secrets/keyring option rather than a plain value, prefer editingconfig.yamldirectly (Options 1-3 above) to useenvsinstead.
Typical agent workflow
# Build a deck
create_presentation(title="My Talk", author="Ada Lovelace")
set_slide(id, 0, "Introduction", "- Point one\n- Point two")
set_slide(id, 1, "Results", "$$E=mc^2$$")
# Validate PDF layout
compile_presentation(id, "/tmp/deck.pdf", format="pdf")
render_slides_as_pngs(id, format="pdf") # → slide_001.png …
# Deliver as PPTX
compile_presentation(id, "/tmp/deck.pptx", format="pptx")
render_slides_as_pngs(id, format="pptx") # validate PPTX layout
Pandoc slide syntax quick reference
| Element | Syntax |
|---|---|
| Section divider | # Section Title as slide content |
| Bullet | - item |
| Incremental bullet | > - item |
| Math block | $$ E=mc^2 $$ |
| Code | ```python\ncode\n``` |
| Image |  |
| Speaker notes | ::: notes\ntext\n::: |
| Two-column layout | :::: {.columns}\n::: {.column width="50%"}\nLeft\n:::\n::: {.column width="50%"}\nRight\n:::\n:::: |
License
MIT
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。