MOSME (local Figma jockey)
MOSME in this repo means: Figma PAT on your machine only, Figma Console MCP for live Figma, and mosme-enrichment MCP for a sub-loop that keeps large JSON off the main stdio path.
Start here
1. MOSME_LOCAL_PAT.md — where the PAT lives (never in unDrifter cloud).
2. MOSME_FIGMA_CONSOLE_JOCKEY.md — Desktop, Bridge, NPX smoke tests.
3. MOSME_STDIO_BUDGET.md — when to call Console vs enrichment.
4. MOSME_FIGMA_CONTRACT.md — goals and split of responsibilities.
5. MOSME_ENRICHMENT_TOOLS.md — enrichment MCP tool reference.
6. MOSME_OPENPENCIL_OPTIONAL.md — optional .fig / OpenPencil spike.
Cursor MCP example
See CURSOR_MCP_EXAMPLE.json (merge into your .cursor/mcp.json; do not commit secrets). If ${workspaceFolder} is not expanded by your client, use an absolute path to mosme/enrichment-mcp/dist/index.js after npm run build. Optional: set MOSME_ENRICHMENT_ROOT (defaults to ~/.undrifter-mosme).
Package
- mosme/enrichment-mcp — build with
npm install && npm run buildinside that directory.
unDrifter product
Shipped capture/inject flow remains extension ↔ server ↔ plugin per AGENTS.md. MOSME is IDE-local tooling alongside that.
Hub API: selectable experts (POST /enrich/chat/mosme)
On a hub with Ollama and both OLLAMA_MOSME_MODEL_A / OLLAMA_MOSME_MODEL_B set, MOSME runs two calls per round: model A = lead expert, model B = partner expert. Each assistant turn in data.transcript includes speaker, expertId, and speakerLabel.
Body (JSON)
| Field | Required | Description |
| -------- | ---------- | ------------- |
message | yes | User prompt (text only). |
rounds | no | 1–3 (clamped by plan when billing is on). |
expertLead | no | Expert id for the lead voice (model A). |
expertPartner | no | Expert id for the partner voice (model B). |
Expert ids: copywriter, frontend, architect, sales, information_architecture, visual_designer.
- Omit both
expertLeadandexpertPartner→ defaults information_architecture (lead) and architect (partner). - Set only
expertLead→expertPartneris chosen from a fixed pairing table (e.g. copywriter → visual_designer). expertPartnerwithoutexpertLeadis invalid (400).
Response: data.expertLead, data.expertPartner echo the resolved ids. Transcript entries for role: "assistant" include expertId and speakerLabel (human-readable role name).
Prompts share a grounding clause (CopyDoc, zones, Figma/FigJam sync) and a dialectic instruction so lead and partner keep each other in check across rounds.