Skip to main content
Glama

TianshangScribe

中文版

PyPI CI License TianshangScribe MCP server

Plattformübergreifende Office-Dokumentverarbeitung für Entwickler, CLI-Automatisierung und KI-Agenten. Erstellen, Bearbeiten, Vorlagenbefüllung und Konvertierung von Word- (.docx), Excel- (.xlsx) und PowerPoint-Dokumenten (.pptx) mit LaTeX-ähnlichem Markup, nativen OMML-Matheformeln und einer Vorlagen-Engine ({{placeholders}}, {{#each}}-Schleifen, {{#if}}-Bedingungen). Enthält einen MCP-Server mit 7 Tools (create, edit, fill template, convert, extract, validate, compare) über stdio-, SSE- und Streamable-HTTP-Transports, mit Bearer-Token-Authentifizierung und Ratenbegrenzung.

Warnung: Instabile API \u2014 breaking changes zu erwarten

Dieses Projekt ist vor 1.0 (0.x). Die CLI-Optionen, MCP-Tool-Signaturen, die Vorlagensyntax und die Ausgabeformate sind nicht eingefroren und können sich ohne Vorankündigung ändern. Kompatibilitätsverpflichtung: Jede breaking change wird mindestens eine Version im Voraus im CHANGELOG angekündigt und mit einem Migrationsleitfaden versehen. Für den Produktionseinsatz auf eine bestimmte Version festlegen und vor dem Upgrade das CHANGELOG überprüfen.

Installation

pip install tianshang-scribe

# Or from source:
git clone https://github.com/Tianshang301/TianshangScribe.git
cd TianshangScribe
pip install -e ".[dev]"

Linux-Bereitstellung

Docker (empfohlen für MCP-Server über Streamable HTTP):

git clone https://github.com/Tianshang301/TianshangScribe.git
cd TianshangScribe
docker compose up -d
# Streamable HTTP MCP Server at http://localhost:8080/mcp
# (override transport / auth / rate limits via TIANSHANG_SCRIBE_* env vars)

.deb-Paket (Debian / Ubuntu):

# Download from GitHub Releases
sudo dpkg -i tianshang-scribe_0.7.1_all.deb
tianshang-scribe --help

pipx (isolierte CLI):

pipx install tianshang-scribe
tianshang-scribe --help

Erfordert Python 3.10+ · python-docx · openpyxl · python-pptx · typer · rich · lxml

Related MCP server: docx-forge-mcp

Schnellstart

# Create a Word document
tianshang-scribe -w --create -a "Hello World" -o hello.docx

# Replace text (--regex for regex mode)
tianshang-scribe input.docx -r "old" --replace-new "new" -o output.docx

# LaTeX markup with nesting
tianshang-scribe -w --create --latex-style \
  -s "font=Times New Roman,size=14" \
  -a "\bfseries{\itshape{bold italic}} \fontsize{24}{Heading} \color{FF0000}{red}" \
  -o styled.docx

# Math formulas —auto-converted to native Word OMML
tianshang-scribe -w --create \
  --math "x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}" \
  --math "\sum_{i=0}^{n} i^2" \
  -o formulas.docx

# Template filling (JSON / CSV / YAML →{{placeholder}})
tianshang-scribe template.docx -t data.json -o filled.docx

# Convert to PDF (office2pdf ~2MB, or LibreOffice fallback)
tianshang-scribe input.docx --topdf -o output.pdf

# MCP Server —stdio mode (Claude Code / Cursor)
python -m tianshang_scribe.mcp.server

# MCP Server —SSE mode (Dify / Coze / FastGPT)
python -m tianshang_scribe.mcp.server --transport sse --port 8080

# Excel: import CSV, sort, export JSON
tianshang-scribe -e --create --from-csv data.csv --sort "A1:A10 asc" --to-json -o out.json

# Excel: add formula, protect workbook
tianshang-scribe budget.xlsx --formula "B10 =SUM(B2:B9)" --protect "p@ss" -o protected.xlsx

Globale Optionen

Parameter

Beschreibung

input_file

Pfad des Eingabedokuments (weglassen mit --create)

-w --word

Word-Dokument verarbeiten

-e --excel

Excel-Arbeitsmappe verarbeiten

-p --ppt

PowerPoint-Präsentation verarbeiten

-o --output

Pfad der Ausgabedatei

--force

Überschreiben vorhandener Dateien erlauben

--topdf

Als PDF ausgeben

--stdin

Von der Standardeingabe lesen

--stdout

In die Standardausgabe schreiben

Wenn -w/-e/-p weggelassen wird, wird der Dokumenttyp aus der Dateierweiterung der Eingabedatei abgeleitet.

Operationen

Option

Beschreibung

Beispiel

-cr --create

Leeres Dokument erstellen

--create -w

-a --add

Text hinzufügen

-a "Hello"

--column

Zielspalte für --add

--column 2

-r --replace

Suchen und ersetzen

-r "foo" --replace-new "bar"

-d --delete

Inhalt löschen

-d "keyword"

-cl --clear

Inhalt / Formate / Links löschen

--clear formats

-m --modify

Inhalt ändern

-m "old" --modify-new "new"

-s --style

Stil festlegen

-s "font=Times,size=14,bold"

-t --template

Vorlage befüllen

-t data.json

-x --extract

Daten extrahieren (math/latex usw.)

-x latex

--meta

Eigenschaften festlegen

--meta "title=Report,author=John"

--latex-style

LaTeX-Parsing aktivieren

--math

Matheformel hinzufügen (Word)

--math "\frac{a}{b}"

--math-style

Mathe-Parsing-Dialekt (office/mathtype)

--math-style mathtype

--math-font

OMML-Mathe-Schriftart (Standard Cambria Math)

--math-font "Times New Roman"

--math-mtef

Als MathType-OLE-Objekt einbetten (MTEF)

--math "\frac{a}{b}" --math-mtef

--heading

Überschrift hinzufügen (Word)

--heading "level:1 text:Intro"

--regex

Regex-Modus

Mit --replace --delete verwenden

--merge

Dateien zusammenführen

--merge "a.docx,b.docx"

--split

Dokument aufteilen (nur Excel: --split by-sheet)

--split by-sheet

--comment

Kommentar hinzufügen (Word) / Sprechernotizen (PPT)

--comment "2 Note text"

--add-table

Tabelle hinzufügen (Word)

--add-table "H1,H2|a1,a2"

--chart-add

Diagramm hinzufügen (Excel)

--chart-add "type=bar data=B1:C10"

--batch

Stapelmodus

--batch

--files

Glob-Muster für Stapelverarbeitung

--files "reports/*.docx"

--schedule-db

Pfad der SQLite-Datenbank für Zeitpläne

--schedule-db ~/.tianshang-scribe/schedules.db

--schedule-add

Zeitplan registrieren

--schedule-add "daily|0 9 * * *|echo hi"

--schedule-rm

Zeitplan entfernen

--schedule-rm daily

--schedule-list

Zeitpläne auflisten

--schedule-list

--schedule-run

Zeitplan jetzt ausführen

--schedule-run daily

--schedule-run-all

Fällige Zeitpläne ausführen

--schedule-run-all

--run-script

Skript in Sandbox ausführen

--run-script build.py

--stdin

Von stdin lesen

--stdout

In stdout schreiben

Word-spezifische Optionen

Option

Beschreibung

Beispiel

--heading

Überschrift hinzufügen

--heading "level:1 text:Intro"

--math

Matheformel hinzufügen

--math "\frac{a}{b}"

--latex-style

LaTeX-Markup aktivieren

--toc

Inhaltsverzeichnis erzeugen

--toc

--section-break

Abschnittsumbruch einfügen

--section-break

--header

Seitenkopf festlegen

--header "Chapter 1"

--footer

Seitenfuß festlegen

--footer "Page X"

--watermark

Text-Wasserzeichen

--watermark "DRAFT"

--tomd

In Markdown konvertieren

--tomd

--tohtml

In HTML konvertieren

--tohtml

Excel-spezifische Optionen

Option

Beschreibung

Beispiel

--sheet-add

Arbeitsblatt hinzufügen

--sheet-add "Q1"

--sheet-delete

Arbeitsblatt löschen

--sheet-delete "Sheet2"

--sheet-rename

Arbeitsblatt umbenennen

--sheet-rename "Old New"

--column-width

Spaltenbreite festlegen

--column-width "2=20"

--row-height

Zeilenhöhe festlegen

--row-height "3=30"

--formula

Zellformel festlegen

--formula "A1 =SUM(B1:B10)"

--from-csv

CSV-Daten importieren

--from-csv data.csv

--sort

Bereich sortieren

--sort "A1:A10 asc"

--chart-add

Diagramm hinzufügen

--chart-add "type=bar data=B1:C10"

--protect

Passwort festlegen

--protect "p@ss"

--unprotect

Passwort entfernen

--unprotect

--to-csv

Als CSV exportieren

--to-json

Als JSON exportieren

--to-html

Als HTML exportieren

LaTeX-Stil-Markup

Fügen Sie das folgende Markup in den Inhalt von --add ein. Aktivieren Sie es mit --latex-style. Verschachtelung wird unterstützt.

Syntax

Effekt

\bfseries{text}

Fett

\itshape{text}

Kursiv

\scshape{text}

Kapitälchen

\underline{text}

Unterstreichen

\rmfamily{text}

Roman (Serif)

\sffamily{text}

Serifenlos

\ttfamily{text}

Monospace

\fontfamily{Arial}{text}

Bestimmte Schriftart

\fontsize{18}{text}

Schriftgröße (pt)

\color{FF0000}{text}

Farbe (hex)

\centering{...}

Zentriert *

\raggedright{...}

Linksbündig *

\raggedleft{...}

Rechtsbündig *

\linespread{1.5}{...}

Zeilenabstand *

\indent{...} / \noindent{...}

Einzug *

\heading{2}{Title}

Überschrift einfügen

\newpage

Seitenumbruch

\includegraphics{path}

Bild einfügen

* Absatzformatierung (erstellt einen neuen Absatz).

Schriftkonfiguration

Befehl

Effekt

\setmainfont{Name}

Standard-Schriftart (westlich)

\setCJKmainfont{Name}

Standard-CJK-Schriftart

\setsansfont{Name}

Serifenlose Schriftart

\setCJKsansfont{Name}

CJK-Serifenlose Schriftart

\setmonofont{Name}

Monospace-Schriftart

\setCJKmonofont{Name}

CJK-Monospace-Schriftart

Word OOXML trennt nativ w:ascii (westlich) und w:eastAsia (CJK) Schriftarten, was einen automatischen Schriftwechsel in gemischtsprachigem Text ermöglicht.

Mathematische Formeln

LaTeX-Matheformeln über --math werden in natives Word-OMML (Office Math Markup Language) konvertiert. Der Konverter ist ein handgeschriebener rekursiv-absteigender Parser (Ausdruck → Term → Faktor → Atom) über einen verschachtelten, unveränderlichen Token-Baum (Bruch-, Wurzel-, N-stellige, Sub/Sup-, Akzent-, Stil-, Begrenzer-Token), der über eine O(1)-Befehlstabelle mit vorkompilierten Regexes und Zero-Copy-Argument-Slicing verteilt wird. Verwenden Sie --math-font "Times New Roman", um Gleichungen mit einer MathType-ähnlichen Serifenschrift statt Words Standard Cambria Math (<m:mathPr><m:mathFont>) darzustellen. --math-style mathtype wechselt den LaTeX-Parsing-Dialekt für MathType-Kompatibilität. Verwenden Sie --math-mtef, um die Formel stattdessen als echtes MathType-OLE-Objekt (MTEF-Binärdatei) einzubetten — bearbeitbar mit älterem MathType (6.x und früher), dasselbe Format, das --extract math zurückliest. Die Ausgabe ist über Releases hinweg byte-für-byte stabil (abgesichert durch eine Golden-Snapshot-Regressionstestsuite).

Unterstützte Syntax

Kategorie

Befehle

Brüche

\frac{num}{den}

Wurzeln

\sqrt{content} \sqrt[n]{content}

Hoch-/Tiefstellen

x^{2} x_{i} x_{i}^{n}

Summen/Integrale

\sum \int \oint \prod \coprod \bigcup \bigcap \bigvee \bigwedge

Grenzwerte

\lim_{x \to 0} \max \min \sup \inf

Benannte Funktionen

\sin \cos \tan \cot \sec \csc \log \ln \det \Pr \gcd \deg \dim \hom \ker \arg

Griechische Buchstaben

\alpha \beta \gamma\Gamma \Delta \Theta

Symbole

\pm \times \div \cdot \infty \partial \nabla \forall \exists

Relationen

\leq \geq \neq \approx \equiv \propto \subset \supset \in

Pfeile

\to \rightarrow \leftarrow \mapsto \uparrow

Akzente

\hat{x} \bar{x} \tilde{x} \dot{x} \ddot{x} \vec{x} \widehat{x} \widetilde{x}

Klammern

\left( \right) \left[ \right] \left\{ \right\}

Mathe-Schriftarten

\mathrm{abc} \mathbf{abc} \mathit{abc} \mathcal{ABC} \mathbb{ABC} \mathsf{abc} \mathtt{abc}

Mathe-Typografie

Entspricht den Standards gängiger Mathematikzeitschriften (AMS, Elsevier, Springer):

Inhalt

Stil

Beispiel

Einbuchstabige Variablen

Kursiv

a b x y

Ziffern

Aufrecht

0 1 2

Benannte Funktionen

Aufrecht

\sin \cos \log

Kleine griechische Buchstaben

Kursiv

\alpha \beta \gamma

Große griechische Buchstaben

Aufrecht

\Gamma \Delta \Theta

Automatische Erkennung

Befehle in --add-Text werden automatisch als Mathematik erkannt, auch ohne $...$-Umschließung:

  • Mit Argumenten: \frac \sqrt \sum \int \prod \lim

  • Akzente: \hat{x} \bar{x} \vec{x} usw.

  • Unäre Operatoren: \sin \cos \tan \log \ln usw.

  • H_{2}O und m^{2} in Klartext werden zu Unicode-Tief-/Hochstellungen (H₂O / m²)

Stil-Syntax

--style verwendet kommagetrennte Schlüssel-Wert-Paare:

--style "font=Times New Roman,size=14,bold,italic,color=FF0000,align=center"

Schlüssel

Aliase

Wert

Beschreibung

font

font_name, font-family

Schriftname

Westliche Schrift

cjk-font

cjk_font_name, cjk-font-family

Schriftname

CJK-Schrift

size

font_size, font-size

pt

Schriftgröße

bold

Flag

Fett

italic

Flag

Kursiv

underline

Flag

Unterstrichen

color

font_color, font-color

FF0000

Hex-Farbe

align

alignment

left/center/right/justify

Ausrichtung

Boolesche Schlüssel (bold italic underline) sind True, wenn sie vorhanden sind.

Vorlagenbefüllung

Unterstützt JSON-, CSV- und YAML-Datenquellen. Ersetzt {{placeholder}} in Dokumenten. Verschachtelte Objekte werden mit Punktnotation erweitert. Schleifen iterieren über Listenwerte. Bedingungen zeigen/verbergen Blöcke.

{
  "name": "John Doe",
  "date": "2026-07-28",
  "user": { "city": "Beijing" },
  "show": true,
  "paid": false,
  "items": [
    { "product": "Widget", "price": "10" },
    { "product": "Gadget", "price": "20" }
  ]
}
{{name}}              → John Doe
{{user.city}}         → Beijing
{{#each items}}       → repeats the block for each item
  {{product}}: {{price}}
{{/each}}
{{#if show}}          → shown only when show is truthy
  Confidential content
{{/if}}
{{#if role=admin}}    → shown only when role equals "admin"
  Admin dashboard
{{/if}}
{{#unless paid}}      → shown only when paid is falsy
  Payment required
{{/unless}}

Excel-Funktionen

Funktion

CLI-Option

Blattverwaltung

--sheet-add --sheet-delete --sheet-rename

Spalten-/Zeilengröße

--column-width --row-height

Formeln

--formula "A1 =SUM(B1:B10)"

Datenimport

--from-csv

Datenexport

--to-csv --to-json --to-html

Sortierung

--sort "A1:A10 asc"

Diagramme

--chart-add "type=bar data=B1:C10"

Schutz

--protect --unprotect

PPT-Funktionen

Funktion

Beschreibung

Folienverwaltung

Folien hinzufügen, löschen, neu anordnen (--slide-add, --slide-delete, --slide-move)

Layouts

Folienlayouts nach Name oder Index anwenden (--layout)

Referentennotizen

Präsentationsnotizen hinzufügen (--notes)

Matheformeln

$...$ / $$...$$ als natives OMML gerendert

Übergänge

Folienübergänge festlegen — Einblenden, Schieben, Wischen usw. (--transition)

Export

Folien als Bilder speichern (--toimg), in PDF konvertieren (--topdf)

Medienkomprimierung

Bilder komprimieren (--compress-media "1920,80")

Schutz

Passwort setzen/entfernen (--protect, --unprotect)

Exit-Codes

Code

Bedeutung

0

Erfolg

1

Allgemeiner Fehler

2

Argumentfehler

3

Nicht implementiert

MCP-Server

TianshangScribe enthält einen MCP-Server (Model Context Protocol) — KI-Agenten können Office-Dokumente erstellen, bearbeiten, Vorlagen befüllen, konvertieren und Daten extrahieren.

Schnellverbindung

stdio (Claude Code, Cursor):

{"mcpServers": {"tianshang-scribe": {
  "command": "python", "args": ["-m", "tianshang_scribe.mcp.server"]
}}}

SSE (Dify, Coze, FastGPT):

python -m tianshang_scribe.mcp.server --transport sse --host 0.0.0.0 --port 8080
{"mcpServers": {"tianshang-scribe": {
  "url": "http://localhost:8080/sse", "transport": "sse"
}}}

Werkzeuge (7)

Werkzeug

Beschreibung

create_office_document

.docx / .xlsx / .pptx mit strukturierten Inhaltsblöcken erstellen

edit_office_document

Ersetzen, Löschen, Ändern, Stylen, Hinzufügen an bestehenden Dokumenten

fill_template

{{placeholders}} mit Daten befüllen; unterstützt {{#each}} / {{#if}}

convert_document

Zwischen Formaten konvertieren (docx↔pdf/md/html, xlsx↔csv/json)

extract_document_data

Metadaten, Volltext oder Dokumentstruktur extrahieren

validate_template

Vorlagen-Platzhalter vor dem Befüllen gegen Daten vorprüfen

compare_documents

Absatzweiser Vergleich zwischen zwei .docx-Dateien

Fähigkeiten

Funktion

Detail

Protokoll

MCP 2024-11-05 · stdio + SSE · JSON-RPC 2.0

Ressourcen

resources/list + resources/read — Dokumente als lesbare URIs verfügbar

Prompts

5 integrierte Workflow-Vorlagen (prompts/list + prompts/get)

Fortschritt

notifications/progress während PDF-Konvertierung und langer Operationen

Antwort

Mehrtyp-content[]: Textnachricht + Ressource (Datei-URI, MIME-Typ, Größe)

Schema

enum, default, examples, minimum/maximum-Einschränkungen für alle Parameter

Produktion (nur SSE)

# With authentication
TIANSHANG_SCRIBE_AUTH_TOKEN="secret" \
python -m tianshang_scribe.mcp.server --transport sse --host 0.0.0.0 --port 8080

# Health check
curl http://localhost:8080/health
# {"status":"ok","version":"0.7.1","uptime_seconds":3600,"active_sessions":3,"tools_available":7}

# CORS whitelist
python -m tianshang_scribe.mcp.server --transport sse --cors-origins "https://coze.com,https://dify.ai"

Endpunkte: GET /health · GET /sse · POST /message?session_id=X

Vollständige Dokumentation: docs/mcp/README.md.

python tests/integration/mcp/mcp_stdio_smoke.py     # 9/9 quick tests (stdio)
python tests/integration/mcp/test_sse.py        # 3/3 SSE transport tests
python tests/integration/mcp/mcp_agent_sim.py      # 11-scenario Agent simulation

Architektur

src/
└── tianshang_scribe/    # importable package (tianshang_scribe.*)
    ├── cli/               # Typer CLI entry
    │  ├── main.py        # Command parsing & dispatch
    │  └── global_opts.py # File path / type inference
    ├── core/              # Document engine abstraction
    │  ├── document.py    # DocumentABC unified interface
    │  ├── word_engine.py # Word engine (python-docx)
    │  ├── excel_engine.py# Excel engine (openpyxl)
    │  └── ppt_engine.py  # PPT engine (python-pptx)
    ├── rendering/         # Style & formula rendering
    │  ├── styles.py      # TextStyle dataclass
    │  ├── latex_parser.py # LaTeX markup parser
    │  ├── math_omml.py   # LaTeX →OMML math converter
    │  └── template.py    # Template filling engine
    ├── transform/         # Format conversion
    │  └── pdf.py         # PDF export (office2pdf + LibreOffice)
    ├── mcp/                    # MCP Server (official mcp SDK 2.x)
    │  ├── server.py           # build_server + entry (stdio / SSE / Streamable HTTP)
    │  ├── transport.py        # transport wiring + ASGI middleware
    │  ├── schemas.py          # pydantic models + as_dict
    │  ├── auth.py             # Bearer token auth
    │  ├── rate_limit.py       # token bucket rate limiting
    │  ├── metrics.py          # Prometheus-style metrics
    │  ├── security.py         # read-only / destructive classification
    │  ├── prompts.py          # 5 prompt workflows
    │  ├── tools/              # 7 Agent tools
    │  │  ├── _registry.py    # tool registry (schemas auto-derived)
    │  │  ├── create.py / edit.py / template.py / convert.py
    │  │  ├── validate.py / compare.py
    │  └── errors.py           # structured error codes + fixes
    └── utils/             # Utility functions
        └── file_utils.py

Technologie-Stack

Komponente

Technologie

CLI

Typer + Rich

Word

python-docx

Excel

openpyxl

PPT

python-pptx

Mathe

Handgeschriebener rekursiv-absteigender Parser → OMML-XML (unveränderlicher Token-Baum, Befehlsverteilungstabelle)

Vorlagen

Eigene Engine ({{placeholder}}, {{#each}}, {{#if}})

PDF

office2pdf (~2MB-Rust-Binärdatei, null Abhängigkeiten) + LibreOffice-Fallback

Qualität

pytest (936 Tests) · ruff · mypy

EXE erstellen

pip install pyinstaller
pyinstaller --onefile --name tianshang-scribe --hidden-import openpyxl.cell._writer --hidden-import openpyxl.cell.read_only --hidden-import openpyxl.styles --hidden-import openpyxl.chart --hidden-import openpyxl.comments src/tianshang_scribe/cli/main.py
# dist/tianshang-scribe.exe (~35 MB)

Demo

python -m demo.generate_demos
# demo/demo_word.docx   —LaTeX + math + TOC + watermark
# demo/demo_excel.xlsx  —CSV import + formulas + chart + protection
# demo/demo_ppt.pptx    —slides + notes + transitions + math formulas

CLI-Konformitätstest:

python demo/test_cli.py

Entwicklung

git clone https://github.com/Tianshang301/TianshangScribe.git
cd TianshangScribe
pip install -e ".[dev]"

pytest tests/ -v        # Run tests
ruff check src/tianshang_scribe/ tests/  # Lint
mypy src/tianshang_scribe/               # Type check

Lizenz

Apache-2.0

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • Generate PDF/DOCX/XLSX/PPTX from templates+JSON. Convert Office/HTML/MD to PDF. Universal templating

  • Use your own Word templates to convert Markdown → DOCX/PDF/HTML from any MCP-compatible AI.

  • Markdown in, any format out. PDFs merged, split, watermarked. Runs on our own doc engines.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Tianshang301/TianshangScribe'

If you have feedback or need assistance with the MCP directory API, please join our Discord server