Atlas / MCP servers / sandraschi / libreoffice-mcp

libreoffice-mcpBLOCK

mcp/sandraschi/libreoffice-mcp

LibreOffice headless automation via FastMCP — Writer/Calc/Impress convert, ODT merge, PDF combine, folder watch. For Cursor / Claude Desktop.

Verdict
BLOCK
Grade
D
Trust score
69 /100
Exposed tools
3 3r · 0w · 0d
Transport
stdio · streamable-http
License
MIT
Stars
4
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

General-purpose LibreOffice automation for agents and humans — headless Writer, Calc, and Impress conversion, ODT template merge, PDF combine, folder watch, live Writer typewriter, and optional extension MCP.

Version 0.3.0 · INSTALL.md · docs/LIVESTUDIOPLAN.md · docs/FEATURES.md · docs/LIVEWRITER.md · docs/EXTENSIONCALC_BRIDGE.md · docs/COMPARISON-OTHER-LO-MCP.md

How it runs

Headless by default — most tools spawn headless soffice automatically. Open Writer + run the bridge macro only when you want to watch live typing. LibreOffice must be installed — INSTALL.md.

Hands-in / Hands-out

Fleet pipelines (downstream)

Read from source at commit bae8a6fa7b6bOBSERVED · 2026-10-11
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add libreoffice-mcp-webapp --env LIBREOFFICE_MCP_SAMPLING_API_KEY=${LIBREOFFICE_MCP_SAMPLING_API_KEY} --env LIBREOFFICE_MCP_SAMPLING_USE_OPENAI_KEY=${LIBREOFFICE_MCP_SAMPLING_USE_OPENAI_KEY} --env OPENAI_API_KEY=${OPENAI_API_KEY} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "libreoffice-mcp-webapp": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "LIBREOFFICE_MCP_SAMPLING_API_KEY": "${LIBREOFFICE_MCP_SAMPLING_API_KEY}",
        "LIBREOFFICE_MCP_SAMPLING_USE_OPENAI_KEY": "${LIBREOFFICE_MCP_SAMPLING_USE_OPENAI_KEY}",
        "OPENAI_API_KEY": "${OPENAI_API_KEY}"
      }
    }
  }
}
03

Exposed tools (3)

3 read · 0 write · 0 destructive.

ToolRiskDescription
libreoffice_helpreadHelp index for LibreOffice MCP operations and coworker PDF flows.
show_libreoffice_status_cardreadShow soffice and extension bridge health as a Prefab card.
show_templates_cardreadShow bundled fleet ODT templates as a Prefab gallery card.
04

Trust audit

BLOCKgrade D · trust 69/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryWARN
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (3 observation(s))
Network
declared (5 observation(s))
Shell
declared (1 observation(s))
Dependencies
not all pinned
Secrets in source
none-found

Findings (23)

HIGHNetwork egress · net.env_exfil · CWE-200, CWE-319
scripts/cua-smoke.py:325
os.environ.copy() ... urllib.request
Why it matters. reads secrets in the same file that sends data out
MEDIUMInventory / provenance · inv.binary · CWE-1104
native/icons/icon.icns
icon.icns
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMInventory / provenance · inv.symlink · CWE-1104
scripts/backup-repo.ps1
scripts/backup-repo.ps1
Why it matters. link not followed
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
mcpb/verify_pack.py:48
mod = importlib.import_module(entry_module_or_file)
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
.env.example:5
LIBREOFFICE_MCP_EXTENSION_BRIDGE_URL=http://127.0.0.1:8765/mcp
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
.env.example:7
LIBREOFFICE_MCP_OLLAMA_BASE_URL=http://127.0.0.1:11434
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
.env.example:9
LIBREOFFICE_MCP_LMSTUDIO_BASE_URL=http://127.0.0.1:1234
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
.env.example:14
LIBREOFFICE_MCP_SAMPLING_BASE_URL=http://127.0.0.1:11434/v1
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
scripts/FleetStartMode.ps1:1
# FleetStartMode.ps1 - vendored per-repo copy (no mcp-central-docs required at runtime)
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
start.ps1:1
# Fleet unified launcher - do not edit logic here.
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
webapp/start.ps1:1
# Fleet unified launcher - do not edit logic here.
LOWInventory / provenance · inv.hidden_file · CWE-1104
.assess-fix-timestamp
.assess-fix-timestamp
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.ghaudit-timestamp
.ghaudit-timestamp
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.mcpbignore
.mcpbignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.pre-commit-config.yaml
.pre-commit-config.yaml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.qualitycheck-timestamp
.qualitycheck-timestamp
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
scripts/cua-webapp-test.py:383
digest = hashlib.md5(img.tobytes(), usedforsecurity=False).hexdigest()
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
webapp/src/components/layout/Sidebar.tsx:29
import { api } from '../../lib/api'
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
webapp/src/components/layout/Sidebar.tsx:30
import { useStore } from '../../store'
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
webapp/src/components/layout/Topbar.tsx:5
import { type Toast, useStore } from '../../store'
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
INSTALL.md:25
# GET http://127.0.0.1:10981/health  → soffice_available: true
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
native/package.json
@tauri-apps/cli
Why it matters. 1 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
webapp/package.json
@tauri-apps/api, framer-motion, lucide-react, react-router-dom, zustand, @biomejs/biome, @playwright/test, @types/react
Why it matters. 15 dependency range(s) float
Fix. pin exact versions or ship a lockfile

Gates applied: no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha bae8a6fa7b6bfull audit observations/trust-audit/mcp-server/sandraschi__libreoffice-mcp.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-11bae8a6fa7b6bBLOCKD69first audit
06

Questions

What is the libreoffice-mcp MCP server?

LibreOffice headless automation via FastMCP — Writer/Calc/Impress convert, ODT merge, PDF combine, folder watch. For Cursor / Claude Desktop.

What tools does libreoffice-mcp expose?

3 in total: 3 read-only, 0 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is libreoffice-mcp safe to connect to an agent?

No — not without reading the findings first. The audit graded it D (69/100) and found 1 critical or high issue in the source. Each one is listed on this page with the file and line it is on.

What credentials does libreoffice-mcp need?

It reads LIBREOFFICE_MCP_SAMPLING_API_KEY, LIBREOFFICE_MCP_SAMPLING_USE_OPENAI_KEY and OPENAI_API_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does libreoffice-mcp run?

It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as libreoffice-mcp-webapp at 0.1.0.

How current is this page?

The grade is for one exact copy of the source (bae8a6fa7b6b), read on 2026-10-11. The repository is watched and re-audited when it changes.

Advertisement