Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Beschreibung vom Entwickler (englisches Original)
Thai-first context compression; shrinks long Thai and English text, originals retrievable.
Diese drei werden nie zu einer Punktzahl zusammengefasst: Meinungen, Messungen und Beliebtheit sind verschiedene Dinge.
Für diesen Server haben wir noch keine Zusammenfassung in einfacher Sprache geschrieben. Unten stehen die Fakten, die wir aus der Registry gelesen haben.
Wähle die KI-App, die du nutzt, und kopiere die Einstellungen.
Du brauchst
Welche App nutzt du?
Wähle oben deine App. Wir merken sie uns, damit der Button beim nächsten Mal „In … installieren“ anzeigt.
Öffne Claude Desktop → Settings → Developer → Edit Config und füge dies in claude_desktop_config.json ein
{
"mcpServers": {
"sarup": {
"command": "uvx",
"args": [
"sarup"
]
}
}
}Führe das in deinem Terminal aus
claude mcp add sarup -- uvx sarupIn .cursor/mcp.json in deinem Projekt oder in ~/.cursor/mcp.json einfügen
{
"mcpServers": {
"sarup": {
"command": "uvx",
"args": [
"sarup"
]
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
In .vscode/mcp.json in deinem Projekt einfügen
{
"servers": {
"sarup": {
"type": "stdio",
"command": "uvx",
"args": [
"sarup"
]
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
Dieser Server läuft auf deinem Computer, und ChatGPT kann sich nur mit Servern im Internet verbinden. Wähle eine andere App.
Deine Auswahl bleibt in einem Cookie auf diesem Gerät; kein Konto nötig.
Diese Einstellungen werden aus dem Registry-Eintrag des Entwicklers erzeugt. Wenn in der README etwas anderes steht, folge der README.
Läuft auf deinem Computer; die Tool-Liste erscheint nach der Installation in deiner KI-App.
Wir prüfen Informationen, die jeder sehen kann; den Code haben wir nicht gelesen. Checks, die nicht zutreffen, werden nicht mitgezählt. · Geprüft am 6. Nov. 2026
Der Registry-Name wurde mit dem GitHub-Konto PHUICMT bestätigt, dem das Repo gehört
Dieses Repo haben wir noch nicht von GitHub gelesen
Dieses Repo haben wir noch nicht von GitHub gelesen
Dieser Server läuft auf deinem Computer; es gibt keinen Endpunkt im Internet
Läuft auf deinem Computer und nutzt stattdessen lokale Einstellungen
Läuft auf deinem Computer; Tool-Listen können wir nur von Endpunkten im Internet lesen
Verglichen mit allen aktiven Servern dieser Kategorie in der Registry. Sterne zählen nur, wenn dem Herausgeber das Repo gehört.
Er hat 1 von 1 zutreffenden Basischecks bestanden. Den Code haben wir nicht gelesen. Bevor du einen Schlüssel oder Token hinzufügst, sieh nach, welche Zugriffe der Server verlangt, und nutze einen Schlüssel, der nur die Berechtigungen hat, die du brauchst.
Die Registry nennt keinen erforderlichen Schlüssel, manche Server bitten dich aber bei der ersten Nutzung, dich anzumelden.
Er läuft auf deinem Computer. Deine KI-App startet ihn bei Bedarf, und die Daten laufen nicht über die Server des Entwicklers (außer der Server ruft selbst einen Onlinedienst auf).
Das GitHub-Repo wurde zuletzt – geändert, und die neueste Version (0.2.0) kam vor 10 Tagen in die Registry.
Apps, die MCP unterstützen, etwa Claude Desktop, Claude Code, Cursor und VS Code. Außerdem brauchst du Python (uv) auf deinem Computer.
In derselben Kategorie: Spec Driven Development, Remote Desktop Commander, Zoo MCP
Server derselben Kategorie von anderen Entwicklern, sortiert nach Sternen.
So liest du eine Karte:★ GitHub-SterneiDrei Säulen: Bewertungen · Checks · NutzungiAktualisiert = neueste Version in der Registry veröffentlichti
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
An MCP server that provides access to the Zoo API for various CAD operations and tools.
Unverändert aus dem Repo des Entwicklers übernommen. PopNx MCP hat den Inhalt weder geprüft noch empfiehlt es ihn. HTML, Bilder und Skripte wurden entfernt. Links führen von dieser Website weg.
Thai-first context compression for Claude Code. An MCP server that actually shrinks Thai (50–78% fewer tokens) and caches every original so nothing is ever lost. Measured for what matters too: whether Claude still answers correctly.
*สรุป* means "to summarize." Headroom routes Thai through
noop(0% savings) because its
whitespace tokenizer can't find Thai word boundaries. Sarup uses PyThaiNLP segmentation, so it
compresses Thai as well as English — and caches every original so nothing is ever lost.
newmm word segmentation, not whitespace.verified: true proves a byte-for-byte round-trip.[…] marks every place sentences were dropped, so Claude retrieves instead of mistaking a nearby fact for the answer.| Tier | What | Guarantee |
|---|---|---|
| Compressed view | the shrunk text the model works on | lossy · small · cheap |
| Retrieval store | the original, keyed by a stable hash | lossless · recoverable |
Aggressive lossy compression is safe *because* the original is always one sarup_retrieve(hash) away. This is how "maximum savings" and "100% accuracy" coexist — they live in different tiers.
Two entry points feed one engine: a cheap compressed view the model reads, and a lossless retrieval store that can restore the original byte-for-byte.
flowchart TD
M["🧑 Manual sarup_compress()"]:::entry --> R A["⚙️ Automatic PostToolUse hook (Read · Bash · Grep)"]:::entry --> R
R{"Sarup compress extractive · semantic · abstractive · pipeline"}:::engine R -- "compressed view 50–78% fewer tokens" --> V["📄 Model context"]:::lossy R -. "cache original" .-> S[("🗄️ Retrieval store hash → original")]:::lossless
V -. "need full detail?" .-> RET["🔑 sarup_retrieve(hash)"]:::lossless RET --> S S == "byte-for-byte ✓" ==> V
classDef entry fill:#e0e7ff,stroke:#6366f1,color:#111 classDef engine fill:#fde68a,stroke:#d97706,color:#111 classDef lossy fill:#fef3c7,stroke:#f59e0b,color:#111 classDef lossless fill:#bbf7d0,stroke:#16a34a,color:#111
sarup_compress / sarup_retrieve itself.SARUP_DB_PATH, and substitutes the compressed view + a retrieval hash. Source code is skipped; small outputs pass through untouched.| Tool | Purpose |
|---|---|
sarup_compress(content, target_ratio?, lossless?, query?, mode?) | Compress; returns compressed text, hash, token metrics,verified, token_method. |
sarup_retrieve(hash) | Recover the original content byte-for-byte. |
sarup_stats() | Cumulative session savings. |
`sarup_compress` arguments
| Arg | Type | Default | Meaning |
|---|---|---|---|
content | string | — | Text to compress (required). |
target_ratio | number | 0.5 | Fraction of prose to keep (0.1–0.9). |
lossless | boolean | false | Only apply lossless transforms (whitespace / JSON compact). |
query | string | "" | What you need from the text; sentences matching it are kept. Pass it whenever you know: it took the QA eval from 69% to 100% at the same size. |
mode | string | extractive | See modes below. |
| Mode | How | Needs Ollama | Savings¹ | Speed¹ | Output |
|---|---|---|---|---|---|
extractive *(default)* | TF-IDF scoring + fact boost + n-gram dedup | no | 52.7% | ~1 ms | verbatim subset |
semantic | Embedding centrality + cosine dedup | yes | 63.8% | ~2 s | verbatim subset |
abstractive | Local-LLM rewrite | yes | 44.4% | ~8 s | paraphrased |
pipeline | Cascade: semantic → abstractive | yes | 78.2% | ~6 s | paraphrased |
auto | semantic if Ollama is up, else extractive | optional | 63.8% | ~2 s | subset |
¹ Measured on a 10-sentence Thai paragraph (522 tokens), rewrite model gemma4:12b. Every mode stays 100% recoverable via the store; Ollama modes degrade gracefully to extractive when the backend is down. (gemma4:e4b: pipeline 82.2%; June 2026, gemma3:12b: 88.1%.)
Extractive and semantic output is a verbatim subset of the input sentences, with […] on its own line wherever sentences were dropped. Sentences carrying specifics (numbers, Thai digits, identifiers like X-Api-Key) score higher than general statements, since those are what questions ask about.
$ .\.venv\Scripts\python.exe bench\benchmark.py
sample before after savings verify Thai prose 522 247 52.7% OK Thai prose (aggressive) 522 189 63.8% OK English prose 105 60 42.9% OK JSON (lossless) 67 44 34.3% OK Logs 563 300 46.7% OK TOTAL 1779 840 52.8% ALL OK → 100% recoverable
Mode comparison (Thai prose, 522 tok): extractive 52.7% (1ms) · semantic 63.8% (2.1s) · auto 63.8% (2.1s) abstractive 44.4% (8.3s) · pipeline 78.2% (5.8s) ← gemma4:12b
Token counts via tiktoken cl100k_base. That is OpenAI's tokenizer and undercounts Claude, most of all on Thai; bench\benchmark.py --claude adds a column from Claude's own tokenizer (Anthropic count_tokens, needs an API key).
Fewer tokens only help if the facts survive. bench\eval_qa.py compresses 8 Thai documents (incident report, meeting notes, API docs, HR policy, product spec, support chat, README, sales report; half line-per-sentence, half dense paragraphs) and asks Claude Opus 5.5 32 questions from the compressed view alone, graded deterministically:
$ .\.venv\Scripts\python.exe bench\eval_qa.py # uses your local `claude` login
mode claude tok saved correct abstain wrong ────────────────────────────────────────────────────────────── original 4601 0.0% 100% 0% 0 extractive:0.5 3204 30.4% 69% 31% 0 extractive:0.3 1969 57.2% 44% 56% 0 semantic:0.5 3214 30.1% 62% 38% 0 extractive:0.5+q 3207 30.3% 100% 0% 0 abstractive:0.5 2697 41.6% 91% 9% 0 ← gemma4:12b pipeline:0.5 1854 59.8% 59% 41% 0 ← gemma4:12b
(gemma4:e4b scored the same: abstractive 91%, pipeline 59%, wrong 0.)
sarup_retrieve. It did not guess from what was left.0.5. Know what you're looking for? Pass it as query (+q row).sarup_compress, not the hook.sarup_retrieve away.[sarup: …] footer, which weighs heavily on these short (~570-token) documents and fades on the large outputs the hook actually compresses.Before the fixes this eval drove (Oct 2026): dense Thai paragraphs were not compressed at all (the sentence splitter's model wasn't installed), extractive:0.5 answered 59% with one confident wrong answer, and semantic:0.5 47%.
A real sarup_compress call on a Thai paragraph (mode="auto", Ollama up → semantic):
// → sarup_compress(content="…518-token Thai paragraph…", mode="auto")
{ "compressed": "จุดเด่นที่สำคัญที่สุดคือมันไม่มีทางทำให้ Claude พัง…", "hash": "caa568140bec0ff734937cf5", "original_tokens": 518, "compressed_tokens": 154, "tokens_saved": 364, "savings_percent": 70.3, "transforms": ["semantic
Nur der Anfang wird gezeigt; den Rest findest du im Repo