TianshangScribe
TianshangScribe
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 --helppipx (isolierte CLI):
pipx install tianshang-scribe
tianshang-scribe --helpErfordert 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.xlsxGlobale Optionen
Parameter | Beschreibung |
| Pfad des Eingabedokuments (weglassen mit |
| Word-Dokument verarbeiten |
| Excel-Arbeitsmappe verarbeiten |
| PowerPoint-Präsentation verarbeiten |
| Pfad der Ausgabedatei |
| Überschreiben vorhandener Dateien erlauben |
| Als PDF ausgeben |
| Von der Standardeingabe lesen |
| In die Standardausgabe schreiben |
Wenn -w/-e/-p weggelassen wird, wird der Dokumenttyp aus der Dateierweiterung der Eingabedatei abgeleitet.
Operationen
Option | Beschreibung | Beispiel |
| Leeres Dokument erstellen |
|
| Text hinzufügen |
|
| Zielspalte für |
|
| Suchen und ersetzen |
|
| Inhalt löschen |
|
| Inhalt / Formate / Links löschen |
|
| Inhalt ändern |
|
| Stil festlegen |
|
| Vorlage befüllen |
|
| Daten extrahieren ( |
|
| Eigenschaften festlegen |
|
| LaTeX-Parsing aktivieren | |
| Matheformel hinzufügen (Word) |
|
| Mathe-Parsing-Dialekt (office/mathtype) |
|
| OMML-Mathe-Schriftart (Standard Cambria Math) |
|
| Als MathType-OLE-Objekt einbetten (MTEF) |
|
| Überschrift hinzufügen (Word) |
|
| Regex-Modus | Mit |
| Dateien zusammenführen |
|
| Dokument aufteilen (nur Excel: |
|
| Kommentar hinzufügen (Word) / Sprechernotizen (PPT) |
|
| Tabelle hinzufügen (Word) |
|
| Diagramm hinzufügen (Excel) |
|
| Stapelmodus |
|
| Glob-Muster für Stapelverarbeitung |
|
| Pfad der SQLite-Datenbank für Zeitpläne |
|
| Zeitplan registrieren |
|
| Zeitplan entfernen |
|
| Zeitpläne auflisten |
|
| Zeitplan jetzt ausführen |
|
| Fällige Zeitpläne ausführen |
|
| Skript in Sandbox ausführen |
|
| Von stdin lesen | |
| In stdout schreiben |
Word-spezifische Optionen
Option | Beschreibung | Beispiel |
| Überschrift hinzufügen |
|
| Matheformel hinzufügen |
|
| LaTeX-Markup aktivieren | |
| Inhaltsverzeichnis erzeugen |
|
| Abschnittsumbruch einfügen |
|
| Seitenkopf festlegen |
|
| Seitenfuß festlegen |
|
| Text-Wasserzeichen |
|
| In Markdown konvertieren |
|
| In HTML konvertieren |
|
Excel-spezifische Optionen
Option | Beschreibung | Beispiel |
| Arbeitsblatt hinzufügen |
|
| Arbeitsblatt löschen |
|
| Arbeitsblatt umbenennen |
|
| Spaltenbreite festlegen |
|
| Zeilenhöhe festlegen |
|
| Zellformel festlegen |
|
| CSV-Daten importieren |
|
| Bereich sortieren |
|
| Diagramm hinzufügen |
|
| Passwort festlegen |
|
| Passwort entfernen |
|
| Als CSV exportieren | |
| Als JSON exportieren | |
| 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 |
| Fett |
| Kursiv |
| Kapitälchen |
| Unterstreichen |
| Roman (Serif) |
| Serifenlos |
| Monospace |
| Bestimmte Schriftart |
| Schriftgröße (pt) |
| Farbe (hex) |
| Zentriert *— |
| Linksbündig *— |
| Rechtsbündig *— |
| Zeilenabstand *— |
| Einzug *— |
| Überschrift einfügen |
| Seitenumbruch |
| Bild einfügen |
*— Absatzformatierung (erstellt einen neuen Absatz).
Schriftkonfiguration
Befehl | Effekt |
| Standard-Schriftart (westlich) |
| Standard-CJK-Schriftart |
| Serifenlose Schriftart |
| CJK-Serifenlose Schriftart |
| Monospace-Schriftart |
| 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 |
|
Wurzeln |
|
Hoch-/Tiefstellen |
|
Summen/Integrale |
|
Grenzwerte |
|
Benannte Funktionen |
|
Griechische Buchstaben |
|
Symbole |
|
Relationen |
|
Pfeile |
|
Akzente |
|
Klammern |
|
Mathe-Schriftarten |
|
Mathe-Typografie
Entspricht den Standards gängiger Mathematikzeitschriften (AMS, Elsevier, Springer):
Inhalt | Stil | Beispiel |
Einbuchstabige Variablen | Kursiv |
|
Ziffern | Aufrecht |
|
Benannte Funktionen | Aufrecht |
|
Kleine griechische Buchstaben | Kursiv |
|
Große griechische Buchstaben | Aufrecht |
|
Automatische Erkennung
Befehle in --add-Text werden automatisch als Mathematik erkannt, auch ohne $...$-Umschließung:
Mit Argumenten:
\frac\sqrt\sum\int\prod\limAkzente:
\hat{x}\bar{x}\vec{x}usw.Unäre Operatoren:
\sin\cos\tan\log\lnusw.H_{2}Oundm^{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 |
|
| Schriftname | Westliche Schrift |
|
| Schriftname | CJK-Schrift |
|
| pt | Schriftgröße |
| Flag | Fett | |
| Flag | Kursiv | |
| Flag | Unterstrichen | |
|
|
| Hex-Farbe |
|
|
| 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 |
|
Spalten-/Zeilengröße |
|
Formeln |
|
Datenimport |
|
Datenexport |
|
Sortierung |
|
Diagramme |
|
Schutz |
|
PPT-Funktionen
Funktion | Beschreibung |
Folienverwaltung | Folien hinzufügen, löschen, neu anordnen ( |
Layouts | Folienlayouts nach Name oder Index anwenden ( |
Referentennotizen | Präsentationsnotizen hinzufügen ( |
Matheformeln |
|
Übergänge | Folienübergänge festlegen — Einblenden, Schieben, Wischen usw. ( |
Export | Folien als Bilder speichern ( |
Medienkomprimierung | Bilder komprimieren ( |
Schutz | Passwort setzen/entfernen ( |
Exit-Codes
Code | Bedeutung |
| Erfolg |
| Allgemeiner Fehler |
| Argumentfehler |
| 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 |
| .docx / .xlsx / .pptx mit strukturierten Inhaltsblöcken erstellen |
| Ersetzen, Löschen, Ändern, Stylen, Hinzufügen an bestehenden Dokumenten |
|
|
| Zwischen Formaten konvertieren (docx↔pdf/md/html, xlsx↔csv/json) |
| Metadaten, Volltext oder Dokumentstruktur extrahieren |
| Vorlagen-Platzhalter vor dem Befüllen gegen Daten vorprüfen |
| Absatzweiser Vergleich zwischen zwei .docx-Dateien |
Fähigkeiten
Funktion | Detail |
Protokoll | MCP 2024-11-05 · stdio + SSE · JSON-RPC 2.0 |
Ressourcen |
|
Prompts | 5 integrierte Workflow-Vorlagen ( |
Fortschritt |
|
Antwort | Mehrtyp- |
Schema |
|
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 simulationArchitektur
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.pyTechnologie-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}}) |
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 formulasCLI-Konformitätstest:
python demo/test_cli.pyEntwicklung
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 checkLizenz
Apache-2.0
Maintenance
Related MCP Servers
- AlicenseBqualityDmaintenanceA universal MCP server for document processing, conversion, and automation. Handle PDF, DOCX, HTML, Markdown, and more through a unified API and toolset.1333139MIT
- AlicenseAqualityDmaintenanceMCP server for Word document (.docx) creation and manipulation — the production-grade document automation tool for AI agents.938MIT
- AlicenseAqualityBmaintenanceMCP server for reading, writing, editing, formatting, and exporting Microsoft Office documents (Word, Excel, PowerPoint) via stdio JSON-RPC, with 47 tools and cross-platform support.47MIT
- AlicenseCqualityDmaintenanceA unified MCP server for document processing that enables creating, editing, and converting Word documents (DOCX), PDFs, Markdown, and images, with support for templates, formatting, and batch operations.100MIT
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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