
Зачем это нужно Link to heading
В работе с оупенкодом да и с агентами в целом, постоянно нужно читать документы, пдф файлы, эксель таблицы, презентации и прочие, не очень текстовые форматы. ЭЛЛ’мки хорошо понимают макрдаун, поэтому задача конвертации в маркдаун возникает постоянно. Также таким образом я — набиваю свое хранилище в обсидиан всякими гайдами.
Майкрософт выпустила утилиту MarkItDown пайтон библиотеку, которая умеет конвертировать, практически, всё во что угодно в маркдаун:
- *.DOCX
- *.XLSX
- *.PPTX
- HTML
- *.EPUB
- *.XML
- ну и так далее
Что такое MCP и как это работает Link to heading
MCP (Model Context Protocol) — это стандарт, который позволяет подключать внешние инструменты к эай-ассистентам (в нашем случае — к оупенкод). Через эмсипи мы даём оупенкод возможность выполнять произвольные действия: читать файлы, запускать команды, ходить в эпиай.
Мы создадим эмсипи сервер, который оборачивает MarkItDown в один простой инструмент convert_to_markdown. После этого оупенкод сможет сам сконвертировать файл в маркдаун, когда это понадобится.
Установка Link to heading
1. Виртуальное окружение и зависимости Link to heading
Макось больше не разрешает ставить пакеты через pip глобально, поэтому создадим venv и установим всё туда:
python3 -m venv ~/.config/opencode/mcp/venv
~/.config/opencode/mcp/venv/bin/pip3 install 'markitdown[all]' 'mcp[cli]'
Разбиваем на составляющие: markitdown[all] сама библиотека конвертации со всеми опциональными зависимостями, mcp[cli] Python SDK для создания эмсипи-серверов.
2. Скрипт эмсипи-сервера Link to heading
Создаём файл ~/.config/opencode/mcp/markitdown_server.py:
from mcp.server.fastmcp import FastMCP
from markitdown import MarkItDown
import os
mcp = FastMCP("MarkItDown")
@mcp.tool()
def convert_to_markdown(file_path: str) -> str:
"""Convert any supported file (PDF, DOCX, PPTX, XLSX, HTML, EPUB, XML) to Markdown."""
file_path = os.path.expanduser(os.path.abspath(file_path))
if not os.path.exists(file_path):
return f"Error: File not found: {file_path}"
md = MarkItDown()
result = md.convert(file_path)
return result.text_content
if __name__ == "__main__":
mcp.run(transport="stdio")
Здесь мы используем FastMCP - фреймворк, который берёт на себя всю работу: парсинг JSON-RPC, логирование и т.д. Кароче способ для ленивых.
3. Регистрация в оупенкод Link to heading
Добавляем сервер в ~/.config/opencode/оупенкод.jsonc:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"bb-browser": { ... },
"markitdown": {
"type": "local",
"command": [
"/Users/beaverbloger/.config/opencode/mcp/venv/bin/python3",
"/Users/beaverbloger/.config/opencode/mcp/markitdown_server.py"
]
}
}
}
Готово! оупенкод теперь знает про сервер и будет вызывать его автоматически.
4. Скилл для оупенкод Link to heading
Чтобы агент сам знал когда вызывать convert_to_markdown, создаём скилл. Он подскажет агенту какие форматы поддерживаются и как сохранять результат.
Создайте файл ~/.opencode/skills/markitdown-converter/SKILL.md:
---
name: markitdown-converter
description: Convert files to Markdown using MCP tool
---
When the user provides a file in a non-text format that needs to be read or converted to Markdown:
1. **Supported formats:** `.pdf`, `.docx`, `.xlsx`, `.pptx`, `.html`, `.epub`, `.xml`
2. **Use the `convert_to_markdown` MCP tool** with the file path. The path can be:
- Absolute: `/Users/name/file.pdf`
- With `~`: `~/Downloads/file.docx`
- Relative: `./file.xlsx`
3. **Save the result** as `.md` file next to the original:
- `~/Documents/doc.pdf` → `~/Documents/doc.md`
- `~/Downloads/report.xlsx` → `~/Downloads/report.md`
4. **Return the path** to the saved `.md` file to the user.
Теперь оупенкод сам понимает — файл не текстовый, надо конвертнуть.
Как это работает Link to heading
Когда оупенкоду нужно обработать документ, он:
- Видит, что есть инструмент
convert_to_markdown - Отправляет к эмсипи-запрос с путём к файлу
- Наш сервер запускает MarkItDown, конвертирует файл
- Возвращает готовый маркдаун
Всё это происходит прозрачно. Оупенкод может вызвать этот инструмент самостоятельно, когда понимает, что файл нужно прочитать.
Проверка Link to heading
Перезапустим оупенкод чтобы эмсипи у нас подхватился и просим конвертировать файл пдф в маркдаун. Или просто скажи «прочитай этот файл» — скилл подскажет агенту что делать и тот сам вызовет convert_to_markdown:

- Результат

Особенности Link to heading
Из коробки библиотека использует встроенные инструменты: pdfplumber для пдф, mammoth для DOCX, openpyxl для XLSX, python-pptx для PPTX, beautifulsoup4 для HTML и т.д.
Итого Link to heading
MarkItDown как эмсипи-сервер для оупенкод для меня это полезная комбинация. Юзайте для себя и вашего агента.