Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Beschreibung vom Entwickler (englisches Original)
Read-only access to Sigao Li's profile, CV and case studies. Bilingual (EN/ZH).
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.
Funktioniert in Claude im Web, auf dem Desktop und auf dem Handy:
https://api.sigaoli.com/mcpFühre das in deinem Terminal aus
claude mcp add --transport http profile https://api.sigaoli.com/mcpIn .cursor/mcp.json in deinem Projekt oder in ~/.cursor/mcp.json einfügen
{
"mcpServers": {
"profile": {
"url": "https://api.sigaoli.com/mcp"
}
}
}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": {
"profile": {
"type": "http",
"url": "https://api.sigaoli.com/mcp"
}
}
}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.
ChatGPT verbindet sich nur mit Servern im Internet:
https://api.sigaoli.com/mcpMenünamen können sich je nach Tarif und mit der Zeit leicht unterscheiden.
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.
Die Tool-Liste dieses Servers haben wir noch nicht gelesen; wir prüfen die Endpunkte reihum.
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 über die Domain sigaoli.com bestätigt (die Registry prüft, wem die Domain gehört)
Dieses Repo haben wir noch nicht von GitHub gelesen
Dieses Repo haben wir noch nicht von GitHub gelesen
Noch nicht geprüft; wir prüfen die Endpunkte reihum
Noch nicht geprüft; wir prüfen die Endpunkte reihum
Noch nicht geprüft; wir lesen die Tool-Liste, wenn wir den Endpunkt prüfen
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 in der Cloud des Entwicklers. Du verbindest dich übers Internet, ohne etwas zu installieren, aber was du sendest, läuft über die Server des Entwicklers.
Das GitHub-Repo wurde zuletzt – geändert, und die neueste Version (1.0.0) kam vor 3 Monaten in die Registry.
Apps, die MCP unterstützen, etwa Claude Desktop, Claude Code, Cursor und VS Code. Er verbindet sich per URL, also funktionieren auch Apps, die Remote-MCP-Server akzeptieren, zum Beispiel ChatGPT im Entwicklermodus.
In derselben Kategorie: Spec Driven Development, Remote Desktop Commander, zanadir
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.
Find what a repository's CI is missing, and which security checks cannot fail the build.
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.
Personal website of Sigao Li — AI Product Manager · Spatial Data Scientist. _From maps to models, and the products in between._
Bilingual (English at /, 中文 at /zh/), built with Astro + Tailwind CSS v4 + GSAP, deployed to GitHub Pages via GitHub Actions. Launched 2026-06-11, replacing the previous Jekyll (academicpages) site.
docs/)/llms.txt, /llms-full.txt, /resume.json (JSON Resume), /knowledge.json, /.well-known/mcp.json, JSON-LD, and a robots.txt that explicitly welcomes AI crawlers_inbox/ and commit. A pre-commit hook works out the country from the coordinates against Natural Earth polygons, archives the originals outside git, derives masters with a maximum edge of 4096px and the EXIF stripped, asks a vision model for the bilingual caption, and registers everything in photos.json — the map, the counts and the assistant's knowledge all follow from there/privacy| Command | Action |
|---|---|
npm run dev | Dev server at localhost:4321 (Astro 7 runs it as a daemon — stop with npx astro dev stop) |
npm run build | Production build to dist/ |
npm run preview | Serve the production build locally |
npm test | Unit tests for both hook pipelines (node --test, no extra dependencies) |
npm run ingest | Photo ingest by hand. Normally the pre-commit hook runs it; useful for watching what it does |
npm run sync | Bilingual sync by hand. Same — the hook runs it, this is for watching |
node scripts/check-links.mjs | Internal link integrity check over dist/ |
node scripts/verify-nav.mjs 等 | Playwright interaction suites (run against a local server) |
npm run dev (in worker/) | Chat + MCP Worker at localhost:8787 (wrangler; secrets in worker/.dev.vars, never committed) |
node scripts/verify-chat.mjs | E2E chat-widget test (needs both dev servers running) |
node scripts/verify-zoe.mjs | E2E for Zoe's action state machine (append ?zoe-fast locally to compress minute-scale timers) |
node scripts/verify-typeroute.mjs | E2E for the intent-driven typing clip and the bilingual 404 page |
Any Playwright suite that waits on Zoe's state must pin the clock
(
Date.prototype.getHours = () => 14): between 23:00 and 06:00 she starts the
session asleep, so
statenever reachesidleand the run just times out.
When adding a Zoe clip, decide who prewarms it and when at the same time.
A clip that is only fetched at playback stalls on a slow connection, and the
stage shows nothing until it decodes. Prewarming has been missed three times
already. Note
warm()takes the *file* name (sit-to-loaf), not theZOE
key (
sitToLoaf).
The chat panel is rebuilt on every navigation —
transition:persistkeeps
Zoe's stage, not the panel. **Anything that lives only in panel DOM is gone
the moment a visitor clicks a link.** The streaming reply, the guidance chip
and the unsent draft each had to be given module state plus a path back
through
paint(); the chip was lost for weeks before anyone noticed. So when
adding persistent UI here, answer two questions up front: how does
paint()
rebuild it, and should it ride along in
sessionStoragewith the history?
Measure geometry only once the panel is visible —
scrollHeightis 0 while
it is hidden, which silently writes
height: 0px.
Turnstile guards `/chat` and `/classify`. It must never guard `/mcp`.
That endpoint exists so machines can read Sigao's profile — it is in the
official registry — and Turnstile exists to stop machines. It also costs
nothing to serve: the tools read the knowledge pack and never call a model.
The static outlets (
llms.txt,knowledge.json,.well-known/mcp.json) are
served by Pages and never reach the Worker at all.
Locally, Turnstile uses Cloudflare's always-pass test keys — sitekey in
site.tsbehindimport.meta.env.DEV, secret inworker/.dev.vars. The real
key rejects headless browsers, which is exactly its job, so every suite that
drives a real Worker would fail against it. The real secret exists only in
production, set with
wrangler secret put. A corollary worth remembering:
the production happy path cannot be verified from a script — reaching it
needs a human in a real browser. Automation can still prove the gate is up
(a request with no credential must return 403).
src/
├── pages/ # en routes + zh/ mirrors; llms.txt / resume.json / knowledge.json endpoints ├── components/ # Nav, Hero, WorldMap, Lightbox, CommandK, ChatWidget … │ └── pages/ # shared page bodies rendered by both locales ├── content/ # cases & research (en) + cases-zh & research-zh (generated, reviewed) ├── data/ # cv.json / cv.zh.json / photos.json (GPS + bilingual alts) │ └── knowledge/ # persona sources for the AI assistant (about / faq / guidelines / boundaries) ├── lib/ # i18n dict, GSAP lifecycle helper, site config │ └── knowledge/ # knowledge-pack pipeline (same-source layers + build-time privacy guard) └── assets/ # photo originals (optimized at build; originals never shipped) worker/ # Cloudflare Worker: /chat (SSE) + /classify (intent) + /mcp (MCP server) └── src/core/ # runtime-agnostic logic; Cloudflare specifics live only in src/adapter/ public/zoe/ # Zoe's clip library (600p VP9 alpha, lazy-loaded; idle loads first) docs/ # zoe-production-handbook.md — clip production specs & prompt cards
One knowledge layer, three outlets: /llms-full.txt for passive crawlers, a chat assistant (POST /chat, SSE) for humans, and an MCP server (/mcp, Streamable HTTP, no auth — tools: get_profile / list_experience / get_case_study) for visiting agents, both served from api.sigaoli.com (Cloudflare Worker, code in worker/). The knowledge pack (/knowledge.json) is assembled at build time from the same sources as the pages — persona markdown, cv.json, case studies, photo stats — so any content edit propagates to all three outlets on the next deploy, no manual step. A privacy guard fails the build if sensitive patterns (phone numbers, IDs, coordinates) ever leak into the pack.
Alongside each reply the chat runs a lightweight intent classifier (POST /classify, a small model) to suggest the single most relevant page, and can remember a returning visitor's name — both kept entirely in the visitor's own browser (opt-in, clearable via "Forget me"), never on a server. Visitors in the EU/EEA/UK have their chat and classification routed to an EU-hosted provider, never the China-direct API. What the site stores and sends is described in plain language at /privacy.
docs/bilingual-sync-design.md.src/data/cv.json or cv.zh.json — the hook keeps the other in step entry by entry, so changing one role doesn't touch the rest. The timeline, /resume.json and /llms-full.txt all render from it. Replace public/files/pdf/CV__Sigao_Li.pdf alongside. (skills is deliberately left out of the sync: the two languages use different shapes there and the renderer handles both.)src/lib/i18n.ts._inbox/ and commit. The pre-commit hook files them by GPS, archives the originals to _originals/ (never committed), derives serving masters with a maximum edge of 4096px, writes bilingual captions with a vision model, and registers them in src/data/photos.json. Photos without GPS go in _inbox/ / instead. Counts, the map and the AI knowledge pack all follow from photos.json automatically. See docs/photo-ingest-design.md.src/data/knowledge/*.md; the knowledge pack rebuilds on every deploy and the assistant follows within ~10 minutes (Worker-side cache TTL).scripts/zoe-board2.mjs → zoe-qc2.mjs → zoe-prod2.mjs) keys, QCs, mirrors and encodes them into public/zoe/. New actions = one clip + one row in the ZOE table in ChatWidget.astro; specs and prompt cards in docs/zoe-production-handbook.md.Two chains run from a pre-commit hook: photo ingest, and bilingual sync. After cloning, point git at the tracked hooks directory once:
git config core.hooksPath .githooks
Without this neither runs — photos dropped into _inbox/ stay there, and the two languages stop tracking each other. Both exit immediately when there is nothing to do, so an ordinary commit is unaffected.
Both need .env (copy .env.example): the model calls for captions, translation and the staleness check all go through that gateway.
Regenerating the lock file. package-lock.json has to be built on Linux. npm records only the optional dependencies it can resolve on the machine it runs on, so a lock made on Windows omits what sharp needs on a runner and npm ci refuses to install. After changing dependencies here, run the Relock on Linux workflow from the Actions tab; it rebuilds the lock, proves npm ci works, and commits the result. Ordinary pushes never need it — and if you forget, the verify job says so.
Push to master → deploy.yml builds and depl
Nur der Anfang wird gezeigt; den Rest findest du im Repo