Office Oxide MCP Server — Quick Start
office-oxide-mcp is a Model Context Protocol server that lets AI assistants extract content from Office documents. It runs locally — no files leave your machine.
Install crgx (one-time)
crgx is an npx-like runner for Rust binaries — it auto-downloads office_oxide_mcp on first run, so there’s no manual MCP install.
Linux / macOS
curl -fsSL crgx.dev/install.sh | sh
Windows (PowerShell)
irm crgx.dev/install.ps1 | iex
Configuration
Once crgx is installed, paste the config below into your AI tool. crgx handles downloading and updating office_oxide_mcp automatically.
Claude Desktop
Add to ~/.config/claude/claude_desktop_config.json (Linux) or ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):
{
"mcpServers": {
"office-oxide": {
"command": "crgx",
"args": ["office_oxide_mcp@latest"]
}
}
}
Claude Code
Add to your project’s .claude/settings.json:
{
"mcpServers": {
"office-oxide": {
"command": "crgx",
"args": ["office_oxide_mcp@latest"]
}
}
}
Cursor
Add to Cursor MCP settings:
{
"mcpServers": {
"office-oxide": {
"command": "crgx",
"args": ["office_oxide_mcp@latest"]
}
}
}
Alternative install
If you’d rather not use crgx, install office_oxide_mcp directly:
cargo install office_oxide_mcp
Then point your AI tool at the binary:
{
"mcpServers": {
"office-oxide": {
"command": "office-oxide-mcp"
}
}
}
Available tools
extract
Extract text, Markdown, HTML, or structured IR from any of the six supported Office formats.
| Parameter | Type | Required | Description |
|---|---|---|---|
file_path |
string | Yes | Path to a .docx, .xlsx, .pptx, .doc, .xls, or .ppt |
output_path |
string | Yes | Path to write the extracted content |
format |
string | No | "text" (default), "markdown", "html", or "ir" |
from_format |
string | No | Override extension-based format detection |
convert
Convert between formats — primarily legacy → OOXML.
| Parameter | Type | Required | Description |
|---|---|---|---|
input_path |
string | Yes | Source file |
output_path |
string | Yes | Target file (target format inferred from extension) |
How it works
The MCP server speaks stdio JSON-RPC 2.0. When an AI assistant needs to read an Office document, it sends a tools/call request and receives a confirmation pointing at the output file.
All processing happens locally using the same Rust extraction engine as the library and CLI — no data is sent to external services.
Prompts that work well
- “Pull the Markdown of
quarterly.docxintoquarterly.md.” - “Convert
legacy/old_report.doctomodern/old_report.docx.” - “Extract
slides.pptxas HTML toslides.htmlso I can preview it in the browser.” - “Dump the IR JSON of
pricing.xlsxtopricing.ir.jsonso I can see the table structure.”
Under the hood the assistant issues a JSON-RPC call like:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "extract",
"arguments": {
"file_path": "/path/quarterly.docx",
"output_path": "/path/quarterly.md",
"format": "markdown"
}
}
}
The server writes the result to output_path and returns a short confirmation; the assistant then reads that file back into its context.
See also
- CLI — the same operations from your terminal
- Rust crate — the same engine as a library
- MCP spec — modelcontextprotocol.io