Best for
- Activation Triggers
- Use Cases
- When NOT to Use
MichelKerkmeester/opencode--skilled-agent-loops-with-spec-kit-memory/.opencode/skills/mcp-tooling/mcp-mobbin/SKILL.md
Mobbin MCP transport: read-only app/screen/flow design research via Code Mode; pair with sk-design-md-generator for a measured Style Reference (extracted design tokens).
Decision brief
Search Mobbin's library of real app UI screenshots ("the world's largest library of real app UI screenshots" per the official repo) from an agent through the Mobbin MCP via Code Mode: one documented tool, searchscreens, answering app, screen, flow, and element research as query…
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/MichelKerkmeester/opencode--skilled-agent-loops-with-spec-kit-memory --skill ".opencode/skills/mcp-tooling/mcp-mobbin"Inspect the Agent Skill "mcp-mobbin" from https://github.com/MichelKerkmeester/opencode--skilled-agent-loops-with-spec-kit-memory/blob/3d386ee21366523774d89c0aff3ebbbc8fa7ff10/.opencode/skills/mcp-tooling/mcp-mobbin/SKILL.md at commit 3d386ee21366523774d89c0aff3ebbbc8fa7ff10. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
Review the “Phase Detection” section in the pinned source before continuing.
The mobbin manual is registered in this repo's .utcpconfig.json (registered 2026-07-16 by an operator, never by this packet). scripts/doctor.sh reports the state read-only: manual presence is the healthy result, and absence is now an ERROR (a broken or reverted registration to e…
Code Mode (mcpcodemodecalltoolchain) owns every Mobbin call, including discovery (listtools, searchtools, toolinfo) — the registered manual resolves in a fresh Code Mode session (manuals load at startup).
sk-design-md-generator is the cross-hub measured-extraction companion: it turns a live website's real CSS into a Style Reference DESIGN.md of named design tokens (type scale, components, Quick-Start CSS/Tailwind). The p…
Use when the user wants to: - Search Mobbin for real-app design references: screens for a UI pattern or state, apps for category comparison, flows for journey steps, or elements for component behavior in context. - Find screen examples from shipped apps ("show me iOS banking onb…
Permission review
The documentation includes network, browsing, or remote request actions.
- Phase 3: Retrieval (search_screens with intent-shaped query; limit 5; platform ios|web)The documentation includes network, browsing, or remote request actions.
| `search_screens` | Read/search | `query`; `platform` `"ios"`\|`"web"` | `mode` `"deep"`\|`"standard"`\|`"fast"` (deprecated alias); `limit`; `exclude_screen_ids[]`; `image_format` `"webp"`\|`"jpg"` |The documentation asks the agent to read local files, directories, or repositories.
**ALWAYS treat this packet as read-only against this repo** (`mutatesWorkspace: false`). All reads happen against the external Mobbin service; Write, Edit, and Task are forbidden tools for this transport.Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 98/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 34 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Search Mobbin's library of real app UI screenshots ("the world's largest library of real app UI screenshots" per the official repo) from an agent through the Mobbin MCP via Code Mode: one documented tool, search_screens, answering app, screen, flow, and element research as query intents. This packet is a read-only TRANSPORT (packetKind: transport, mutatesWorkspace: false): every call goes against the external hosted Mobbin service, never this repo, and it produces no design tokens or Style Reference of its own. When a measured Style Reference of real, extracted design tokens is also wanted, pair with sk-design-md-generator. Deep operational detail lives in references/tool-surface.md and references/mcp-wiring.md.
Discovery status (read first). The
mobbinCode Mode manual IS REGISTERED in this repo's.utcp_config.json(registered 2026-07-16 by an operator; this packet never edits the config), and live discovery RAN 2026-07-16, pre-auth (fixture:references/discovery-fixture-2026-07-16.json):list_toolsreturned THREE read tools — registry namesmobbin.mobbin.{search_screens,search_flows,search_sections}(dot-separated), TS callablesmobbin.mobbin_search_screens(...)etc. per the fixture'sAccess as:lines — superseding the research's one-public-tool baseline. Operator browser OAuth is still pending for CALLS. Per-sessiontool_infore-confirmation stays MANDATORY before relying on any name: confirm, then call, and fail closed on drift.Access trap. Mobbin MCP access is documented for Pro, Team, and Enterprise — not Free. Authentication is browser OAuth only (DCR + PKCE S256,
openidscope): no static API key or auth env var exists for MCP — that question is answered in the negative, not open. Unauthenticated calls return HTTP 401. The service is rate-limited to 60 requests per 60 seconds per user.
Use when the user wants to:
mobbin Code Mode manual, its OAuth authentication, its plan gating, or its rate limit.Keyword Triggers: "mobbin", "mobbin mcp", "app design research", "screen examples", "ux flow references", "real app screenshots", "search mobbin".
App research (read-only). Name the app, company, or category plus the comparison goal ("banking apps onboarding identity verification"); compare app_name, platform, structure, and visible patterns across results. Multiple results are evidence, not a design chooser.
Screen research (read-only). Name the concrete screen, state, or job ("iOS subscription cancellation confirmation"); start at 5 results; cite each mobbin_url used.
Flow research (read-only). Describe the journey and target step. The public contract returns screens, not an ordered flow object — reconstruct sequence only when visual evidence supports it, and label the reconstruction as inference.
Element research (read-only). Name component plus context/state ("bottom-sheet destructive confirmation", "inline validation on signup"); analyze element behavior within returned screens.
Wiring and auth verification. Report the manual's registration state honestly (presence is the healthy result; absence is a failure symptom to escalate), explain the OAuth-only model and plan gate, and never repair auth state yourself.
Skip this skill when:
sk-design-md-generator; this packet only retrieves Mobbin screenshot evidence.mcp-refero, the sibling transport.mcp-figma.mcp-chrome-devtools.sk-code.docs.mobbin.com/mcp is a separate Mintlify docs-search MCP, not the design-reference server; this packet targets api.mobbin.com/mcp only..utcp_config.json manual, or repair auth state. This transport forbids Write/Edit/Task, never mutates the workspace, and the registered manual is operator-owned.Route on narrow Mobbin-specific signals only. Generic "design", "UI", or "screen" phrasing is not a Mobbin signal; measured live-site extraction belongs to sk-design-md-generator, Refero references to mcp-refero, Figma work to mcp-figma, and browser work to mcp-chrome-devtools.
# Signal detection (pseudo)
echo "$REQUEST" | grep -qiE 'mobbin' && ROUTE="MCP_MOBBIN"
echo "$REQUEST" | grep -qiE 'app design research|real app (screenshots|screens)|ux flow reference' && ROUTE="MCP_MOBBIN"
# generic design/UI phrasing WITHOUT these signals -> not this packet (measured extraction -> sk-design-md-generator)
TASK CONTEXT
|
+- STEP 0: Verify wiring state (mobbin manual registered; presence expected — absence is a failure to escalate)
+- STEP 1: Score intent -> APPS | SCREENS | FLOWS | ELEMENTS | WIRING_AUTH | TROUBLESHOOT
+- Phase 1: Measured Style Reference also wanted? -> pair sk-design-md-generator (extracted design tokens); retrieval stays here
+- Phase 2: Discovery (list_tools / tool_info confirms the callable name) [MANDATORY; needs a fresh Code Mode session]
+- Phase 3: Retrieval (search_screens with intent-shaped query; limit 5; platform ios|web)
+- Phase 4: Verify (evidence cited by mobbin_url; failed[] reported; unknowns preserved; no invented tools)
The router discovers markdown resources recursively from references/ and assets/, then applies intent scoring. This skill uses a flat intent router: no keyed references/<key>/ subdirectories. References are the primary loaded resources; the single asset is the registered manual's reference shape.
references/tool-surface.md # the one-tool surface, args, response shape, workflows, plan gating
references/mcp-wiring.md # registered manual, mcp-remote bridge, OAuth/DCR/PKCE, naming, discovery
references/troubleshooting.md # failure modes + fixes
assets/utcp-mobbin-manual.md # Registered manual's reference shape + post-registration checklist
| Level | When to Load | Resources |
|---|---|---|
| CONDITIONAL | Research intent (apps/screens/flows/elements) | references/tool-surface.md (tool contract + workflow baseline) |
| CONDITIONAL | Wiring / auth intent | references/mcp-wiring.md, assets/utcp-mobbin-manual.md |
| CONDITIONAL | Setup / error intent | references/troubleshooting.md |
| FALLBACK | Zero-score routes only | references/tool-surface.md suggested (never auto-loaded) |
| PAIR (measured reference) | A measured Style Reference of extracted tokens is also wanted | sk-design-md-generator, the measured-extraction companion |
Resilience pattern: see sk-doc smart-router template. Guard paths, discover at runtime, score intents, and fall back when unsure. Because this skill has no keyed resource subdirectories, intent selects from the flat resource inventory below.
from pathlib import Path
SKILL_ROOT = Path(__file__).resolve().parent
RESOURCE_BASES = (SKILL_ROOT / "references", SKILL_ROOT / "assets")
DEFAULT_RESOURCE = "references/tool-surface.md"
# Fallback-only: DEFAULT_RESOURCE is a defer-time suggestion, never unioned
# into a route's loaded set. Scored routes load exactly RESOURCE_MAP[intent];
# zero-score routes load nothing and ask for disambiguation instead.
DEFAULT_RESOURCE_SEMANTICS = "fallback-only"
MIN_CONFIDENCE = 1
AMBIGUITY_DELTA = 1
INTENT_MODEL = {
"APPS": {"keywords": [("app design research", 4), ("app research", 4), ("competitor", 3), ("app comparison", 3), ("banking apps", 2), ("category", 2), ("how do apps", 2), ("real apps", 3)]},
"SCREENS": {"keywords": [("screen", 4), ("screen examples", 4), ("ui pattern", 3), ("empty state", 3), ("first open", 3), ("onboarding screen", 3), ("component example", 3), ("screenshot", 3), ("paywall", 2), ("settings", 2), ("dashboard", 2)]},
"FLOWS": {"keywords": [("flow", 4), ("ux flow", 4), ("user flow", 4), ("journey", 4), ("start to finish", 3), ("multi-step", 3), ("progression", 2), ("forgot password", 2), ("checkout", 2), ("signup process", 2)]},
"ELEMENTS": {"keywords": [("element", 4), ("bottom sheet", 3), ("inline validation", 3), ("component behavior", 3), ("button state", 2), ("tab bar", 2), ("modal", 2), ("confirmation dialog", 2)]},
"WIRING_AUTH": {"keywords": [("wiring", 4), ("utcp", 4), ("oauth", 4), ("mcp-remote", 4), ("authenticate", 4), ("pkce", 3), ("manual", 3), ("register", 3), ("token", 3), ("plan", 2), ("install", 2), ("setup", 2)]},
"TROUBLESHOOT": {"keywords": [("error", 4), ("failed", 4), ("401", 4), ("not working", 4), ("not resolving", 4), ("429", 3), ("rate limit", 3), ("timeout", 3), ("unauthorized", 3), ("denied", 3)]},
}
# Benchmark-facing mirror of INTENT_MODEL in the standard {weight, keywords} shape
# the skill-benchmark router-replay reads (the tuple form above parses to zero
# intents there). Runtime scoring uses INTENT_MODEL; this block changes no routing.
# Per-intent weight = the MAX per-keyword weight in INTENT_MODEL for that intent
# (all six resolve to 4). Keys and keywords MUST stay identical to INTENT_MODEL;
# keep the two blocks in sync whenever either one is edited.
INTENT_SIGNALS = {
"APPS": {"weight": 4, "keywords": ["app design research", "app research", "competitor", "app comparison", "banking apps", "category", "how do apps", "real apps"]},
"SCREENS": {"weight": 4, "keywords": ["screen", "screen examples", "ui pattern", "empty state", "first open", "onboarding screen", "component example", "screenshot", "paywall", "settings", "dashboard"]},
"FLOWS": {"weight": 4, "keywords": ["flow", "ux flow", "user flow", "journey", "start to finish", "multi-step", "progression", "forgot password", "checkout", "signup process"]},
"ELEMENTS": {"weight": 4, "keywords": ["element", "bottom sheet", "inline validation", "component behavior", "button state", "tab bar", "modal", "confirmation dialog"]},
"WIRING_AUTH": {"weight": 4, "keywords": ["wiring", "utcp", "oauth", "mcp-remote", "authenticate", "pkce", "manual", "register", "token", "plan", "install", "setup"]},
"TROUBLESHOOT": {"weight": 4, "keywords": ["error", "failed", "401", "not working", "not resolving", "429", "rate limit", "timeout", "unauthorized", "denied"]},
}
RESOURCE_MAP = {
"APPS": ["references/tool-surface.md"],
"SCREENS": ["references/tool-surface.md"],
"FLOWS": ["references/tool-surface.md"],
"ELEMENTS": ["references/tool-surface.md"],
"WIRING_AUTH": ["references/mcp-wiring.md", "assets/utcp-mobbin-manual.md"],
"TROUBLESHOOT": ["references/troubleshooting.md", "references/mcp-wiring.md"],
}
UNKNOWN_FALLBACK_CHECKLIST = [
"Confirm the research intent: apps, screens, flows, or elements (all are query intents over search_screens)",
"Confirm the mobbin manual's registration state (registered; absence is a failure symptom to escalate, never repair)",
"Confirm the account has a paid plan (Pro, Team, or Enterprise); Free has no MCP access",
"If a measured Style Reference of extracted design tokens is also wanted, pair sk-design-md-generator; this transport only retrieves Mobbin screenshot evidence",
]
def _guard_in_skill(relative_path: str) -> str:
resolved = (SKILL_ROOT / relative_path).resolve()
resolved.relative_to(SKILL_ROOT) # raises if path escapes the skill
if resolved.suffix.lower() != ".md":
raise ValueError(f"Only markdown resources are routable: {relative_path}")
return resolved.relative_to(SKILL_ROOT).as_posix()
def discover_markdown_resources() -> set[str]:
docs = []
for base in RESOURCE_BASES:
if base.exists():
docs.extend(p for p in base.rglob("*.md") if p.is_file())
return {d.relative_to(SKILL_ROOT).as_posix() for d in docs}
def classify_intents(request: str):
text = (request or "").lower()
scores = {i: 0 for i in INTENT_MODEL}
for intent, cfg in INTENT_MODEL.items():
for kw, w in cfg["keywords"]:
if kw in text:
scores[intent] += w
ranked = sorted(scores.items(), key=lambda kv: kv[1], reverse=True)
primary, top = ranked[0]
if top == 0:
return (None, None, scores) # unrouted -> no intent selected; fallback branch disambiguates
secondary, second = ranked[1]
if second > 0 and (top - second) <= AMBIGUITY_DELTA:
return (primary, secondary, scores)
return (primary, None, scores)
def route_mobbin_resources(request: str):
inventory = discover_markdown_resources()
primary, secondary, scores = classify_intents(request)
intents = [i for i in (primary, secondary) if i]
loaded, seen, notices = [], set(), []
def load_if_available(rel: str) -> bool:
guarded = _guard_in_skill(rel)
if guarded in inventory and guarded not in seen:
load(guarded); loaded.append(guarded); seen.add(guarded)
return True
if guarded not in inventory:
notices.append(f"Resource not found in inventory: {guarded}")
return False
if max(scores.values() or [0]) < MIN_CONFIDENCE:
# Fallback-only: nothing is loaded on a zero-score route; the default
# reference is offered as a suggestion beside the disambiguation ask.
return {"intents": intents, "load_level": "UNKNOWN_FALLBACK", "needs_disambiguation": True,
"disambiguation_checklist": UNKNOWN_FALLBACK_CHECKLIST,
"suggested_fallback": DEFAULT_RESOURCE, "resources": loaded, "notices": notices}
for intent in intents:
for rel in RESOURCE_MAP.get(intent, []):
load_if_available(rel)
return {"intents": intents, "intent_scores": scores, "resources": loaded, "notices": notices}
The mobbin manual is registered in this repo's .utcp_config.json (registered 2026-07-16 by an operator, never by this packet). scripts/doctor.sh reports the state read-only: manual presence is the healthy result, and absence is now an ERROR (a broken or reverted registration to escalate, never repair). Because manuals load at Code Mode startup and OAuth is still pending, discovery through a fresh Code Mode session is mandatory before any call:
// Live-confirmed dotted discovery names (2026-07-16 fixture):
// mobbin.mobbin.search_screens · mobbin.mobbin.search_flows · mobbin.mobbin.search_sections
const all = await list_tools();
// MANDATORY per session: confirm the exact callable + schema before relying on any name
const info = await tool_info({ tool_name: "mobbin.mobbin_search_screens" });
Both the dotted discovery names and the callable form are CONFIRMED by live discovery 2026-07-16 (references/discovery-fixture-2026-07-16.json; the convention-derived prediction held exactly). Discovery ran pre-auth — tools/list and schemas needed no OAuth; authenticated CALLS remain operator-gated. If a future discovery shows different names, missing tools, unexpected new tools, or a mutation-capable tool, fail closed: report the drift; a changed provider surface requires a reviewed packet update, not an improvised call.
The research's one publicly documented tool baseline is superseded: live pre-auth discovery on 2026-07-16 listed three read-only search tools. All three passed the mutation-refusal check (no mutation-capable tool in the listing). Full fixture schemas and the completeness boundary: references/tool-surface.md.
| Tool | Posture | Required inputs (fixture schema) | Optional inputs (fixture schema) |
|---|---|---|---|
search_screens | Read/search | query; platform "ios"|"web" | mode "deep"|"standard"|"fast" (deprecated alias); limit; exclude_screen_ids[]; image_format "webp"|"jpg" |
search_flows | Read/search | query (one journey); platform "ios"|"web" | limit; page (max 20); image_format |
search_sections | Read/search | query (one website section) | limit; page; image_format |
Declared search_screens output (fixture): { query, screens: [{ id, image_url, mobbin_url, app_name, platform }] } — the research-documented index/failed[] fields do not appear in the declared schema; verify the actual response shape on the first authenticated call. The deep conflict is RESOLVED: search mode is a client-settable input on search_screens ("deep" = AI-powered relevance pipeline for nuanced queries; "standard" = low latency; "fast" = deprecated alias for standard). Never invent search_apps, search_elements, or any detail/image-download/mutation tool beyond the discovered inventory.
Callable-name status. The callable is confirmed by live discovery 2026-07-16 (
references/discovery-fixture-2026-07-16.json): registry namemobbin.mobbin.search_screens, TS callablemobbin.mobbin_search_screens(args). The call below quotes the confirmed form; the live RESPONSE behavior is still unexercised (authenticated calls pend operator OAuth), so re-confirm withtool_infoper session.
call_tool_chain({
code: `
const result = await mobbin.mobbin_search_screens({
query: "iOS banking app onboarding identity verification",
platform: "ios",
limit: 5
});
return { success: true, data: result, errors: [], timestamp: new Date().toISOString() };
`
});
Mandatory discovery-first sequence: list_tools() or search_tools({ task_description: "Mobbin screen design research", limit: 10 }) -> filter to the mobbin manual -> tool_info() on the exact dotted name -> only then call_tool_chain({ code }). Cite every selected reference by its mobbin_url.
App, screen, and element research remain intent-specific query designs over search_screens; flow and website-section research now have dedicated live-discovered tools (2026-07-16):
app_name, platform, structure, visible patterns.mobbin_url used.search_flows: describe one user journey ("onboarding with personalization steps"); it returns ordered flow objects (screens[].position, actions[], screen_count), superseding the old screens-only reconstruction guidance. Label anything beyond the returned ordering as inference.search_sections: describe one section ("pricing page with plan comparison table"); results carry site_name and section images.Official skill operating sequence: derive query terms from the user's actual words -> infer ios vs web from app context (unclear -> ask) -> announce a short search plan -> call search_screens in the same turn -> visually inspect returned references (observe content, structure, styling, interaction; compare repeats and meaningful differences; synthesize principles) -> answer from evidence tied to returned screens. The official skill's optional evidence-board writer is excluded from this transport (read-only boundary).
Context discipline: start limit: 5; ask before widening materially (do not exceed ~15 just for variety); report failed[] entries and missing images as partial success, never silently discard; retain mobbin_url as provenance for every selected reference.
openid scope. No static Mobbin API key exists for MCP; the API-key Bearer model belongs to the separate Team/Enterprise REST API and must never be conflated with MCP. Client access is revocable from Mobbin Account Settings -> MCP. Adapter auth state persists under ~/.mcp-auth (or MCP_REMOTE_CONFIG_DIR) and is operator-owned: never inspect, clear, or repair it. A live unauthenticated probe returned HTTP 401 with a WWW-Authenticate pointer to the protected-resource metadata — a pre-authorization 401 is the expected challenge, not a missing-key error. End-to-end OAuth through the local Code Mode + mcp-remote bridge is Inferred, not verified: no operator has completed the flow in this repo's record.Retry-After, then exponential backoff with jitter.https://api.mobbin.com/mcp — there is no local package to install; the official repo is metadata-only. The local bridge is npx -y mcp-remote over stdio (HTTP-first, SSE fallback only on HTTP 404; experimental, externally versioned; Node 18+ and working npx are prerequisites).tool_info before first use. The mobbin.mobbin_search_screens form is CONFIRMED by live discovery 2026-07-16 (fixture references/discovery-fixture-2026-07-16.json; registry names are dotted mobbin.mobbin.<tool>). Fail closed on any drift from the live three-tool baseline (search_screens, search_flows, search_sections).sk-design-md-generator, and pair it when a measured Style Reference is also wanted. This packet is the transport; sk-design-md-generator is its cross-hub measured-extraction companion, turning a live site's real CSS into a Style Reference DESIGN.md of named design tokens. Transport output is Mobbin screenshot evidence and never a design-token set or Style Reference by itself.mobbin manual is registered in .utcp_config.json: presence means verify read-only and proceed to discovery; absence is a failure symptom (a broken or reverted registration) to escalate to the operator, never to repair from this packet.query from the user's actual words, platform ios|web (infer from context; unclear -> ask), limit starting at 5 and never exceeding ~15 without asking. Preserve unknown response fields untouched.mobbin_url and report failed[] entries and missing images as partial success, never silently discarding them.mutatesWorkspace: false). All reads happen against the external Mobbin service; Write, Edit, and Task are forbidden tools for this transport.mobbin manual in .utcp_config.json. The registered entry is operator-owned. The reference shape in assets/utcp-mobbin-manual.md exists for verification and escalation, not for this packet to apply or repair.MOBBIN_API_KEY or any MCP auth env var exists — the manual's env stays empty, and the auth env-var question is answered in the negative, not open. Never accept credentials in prompts or tool arguments; never print Authorization headers, OAuth codes, token responses, adapter debug logs, or auth-cache contents.~/.mcp-auth / MCP_REMOTE_CONFIG_DIR — reauthorization is an explicit operator action.search_screens, search_flows, and search_sections. No search_apps, search_elements, detail, image-download, or mutation tools exist to call. The deep question is resolved — mode: "deep" | "standard" | "fast" is a real client input on search_screens — but do not assume undeclared parameters on any tool.docs.mobbin.com/mcp. That is a separate Mintlify docs-search MCP; the design-reference server this packet owns is api.mobbin.com/mcp only. Likewise never conflate the OAuth MCP with the separate API-key REST API.Retry-After + backoff protocol), reporting the provider's message verbatim without guessing denial semantics..utcp_config.json. The registered entry is operator-owned; a broken or reverted registration is reported with the reference shape in the asset, and any config change stops with the operator.sk-design-md-generator Style Reference (its extracted design tokens), asking which source prevails before any conclusion is drawn.search_screens, search_flows, search_sections), the resolved deep mode, the query-intent workflows, plan gating, the completeness boundary, and the open questions.mobbin manual, the mcp-remote bridge (remote Streamable HTTP vs local stdio adapter), OAuth/DCR/PKCE, the confirmed naming (2026-07-16 fixture), and the discovery-first contract, with CONFIRMED/INFERRED/UNKNOWN tagging.tool-surface.md is the baseline (always). Load mcp-wiring.md and the manual asset for wiring/auth intent, troubleshooting.md for errors.Wiring reporting complete when:
.utcp_config.json was touched, and discovery (list_tools / tool_info) either confirmed the callable or the session/auth/entitlement blocker was escalated to the operator.Retrieval complete when:
query, platform, limit starting at 5), results were cited by mobbin_url, failed[] and missing images were reported as partial success, and no invented tool or parameter was used.Measured-reference pairing complete when:
sk-design-md-generator owned any measured Style Reference (extracted design tokens), the transport supplied only requested Mobbin evidence, and no design-token set or Style Reference was fabricated from transport output.Always:
mcp__code_mode__call_tool_chain) owns every Mobbin call, including discovery (list_tools, search_tools, tool_info) — the registered manual resolves in a fresh Code Mode session (manuals load at startup)..utcp_config.json read-only.scripts/doctor.sh diagnostics; this transport has no other shell role (Code Mode owns the stdio process launch, so the packet never runs npx itself).sk-design-md-generator is the cross-hub measured-extraction companion: it turns a live website's real CSS into a Style Reference DESIGN.md of named design tokens (type scale, components, Quick-Start CSS/Tailwind). The pairing: this packet retrieves cited Mobbin screens through Code Mode as reference evidence, and sk-design-md-generator produces the measured Style Reference of extracted tokens from an actual live site. The transport issues no design tokens or Style Reference of its own; pure setup/doctor or factual tool-surface reporting stays purely retrieval.mcp-code-mode is the substrate: manuals, {manual}.{manual}_{tool} naming, discovery, and the error-envelope discipline all come from it. The current local config surface documents stdio/sse manual shapes, which is why the registered manual bridges through mcp-remote rather than declaring direct Streamable HTTP.mcp-refero is the closest sibling: another remote-MCP-via-mcp-remote, read-only, OAuth-gated design-research transport in this hub. mcp-figma is the hub's original Figma transport. Neither overlaps this packet's Mobbin surface.https://api.mobbin.com/mcp): the external, paid, hosted design-research service (manifest identity com.mobbin/mobbin v1.0.1; provider transport Streamable HTTP). Not vendored, not mirrored, no local package exists.npx from the registered manual. HTTP-first transport strategy with SSE fallback only on HTTP 404; Node 18+ required.github.com/mobbin/skills, MIT): contains exactly one skill, mobbin-search, the authoritative usage contract for search_screens. npx skills add mobbin/skills installs guidance only; it does not replace the MCP manual or OAuth.Required: references/tool-surface.md (tool contract baseline). Conditional: mcp-wiring.md + assets/utcp-mobbin-manual.md (wiring/auth), troubleshooting.md (errors).
| Item | Value |
|---|---|
| Endpoint | https://api.mobbin.com/mcp (hosted remote, Streamable HTTP; local bridge npx -y mcp-remote) |
| Manual | mobbin — REGISTERED in .utcp_config.json (2026-07-16); discovery DONE 2026-07-16 pre-auth (references/discovery-fixture-2026-07-16.json); OAuth pends the operator for CALLS (reference shape in assets/utcp-mobbin-manual.md) |
| Callable form | mobbin.mobbin_search_screens(...) — CONFIRMED 2026-07-16; registry names dotted mobbin.mobbin.<tool>; re-confirm via tool_info per session |
| Tool surface | THREE live tools: search_screens (query, platform "ios"|"web", mode "deep"|"standard"|"fast", limit, exclude_screen_ids, image_format), search_flows (query, platform, limit, page), search_sections (query, limit, page) |
| Result | Declared: search_screens {query, screens[{id, app_name, mobbin_url, image_url, platform}]}; search_flows/search_sections add page, has_next_page; live response shape untested pre-OAuth |
| Workflows | Apps / screens / elements = query intents over search_screens; flows = search_flows; website sections = search_sections |
| Auth | Browser OAuth (DCR, PKCE S256, openid) — no API key, no auth env var; state in ~/.mcp-auth, operator-owned |
| Plans | Free: NO MCP · Pro/Team/Enterprise: MCP eligible; per-plan caps undocumented |
| Rate limit | 60 requests / 60 seconds / user; on 429 honor Retry-After, then backoff with jitter |
| Open items | Authenticated calls + live response shapes unexercised; OAuth end-to-end Inferred; inline-image fidelity through call_tool_chain UNKNOWN (naming + inventory + deep mode: resolved 2026-07-16) |
| Measured reference | sk-design-md-generator for a Style Reference of extracted design tokens |
The router (Section 2) discovers reference and asset docs dynamically. Start from references/tool-surface.md for the tool contract and workflows, references/mcp-wiring.md for the bridge and auth model, and references/troubleshooting.md for failures.
Assets: assets/utcp-mobbin-manual.md (the registered manual's reference shape, byte-identical to the researched sol/luna drafts and to the live .utcp_config.json entry), loaded for wiring/auth intent.
Scripts: scripts/doctor.sh (read-only, non-interactive diagnostics; manual absence now reported as an ERROR — a broken or reverted registration; optional endpoint probe gated behind MOBBIN_DOCTOR_LIVE=1, expecting the documented HTTP 401) and scripts/install.sh (non-interactive verify-only posture check: Node 18+/npx, manual presence, and the operator-only OAuth pointer).
Examples: examples/README.md plus worked Code Mode walkthroughs (smoke search, platform-filtered flow research, element intent), all quoting the 2026-07-16 discovery-confirmed callables with the mandatory per-session tool_info confirmation first.
Related skills: sk-design-md-generator (the measured-extraction companion), mcp-code-mode (the substrate), mcp-refero (the closest sibling transport), mcp-figma (the hub's Figma transport), mcp-chrome-devtools (browser preview only), sk-code (adapting evidence into an app), and system-spec-kit when packet documentation or memory continuity applies.
Install guide: INSTALL-GUIDE.md.
Upstream: the Mobbin MCP is the hosted paid service at api.mobbin.com/mcp (docs at docs.mobbin.com/mcp; the official mobbin/mobbin-mcp-server repository is registration metadata only). The official mobbin/skills repository (MIT) holds the single mobbin-search skill; this packet references it and deliberately does not vendor it.
Frequently asked questions
Search Mobbin's library of real app UI screenshots ("the world's largest library of real app UI screenshots" per the official repo) from an agent through the Mobbin MCP via Code Mode: one documented tool, searchscreens, answering app, screen, flow, and element research as query…
The source record exposes this install command: npx skills add https://github.com/MichelKerkmeester/opencode--skilled-agent-loops-with-spec-kit-memory --skill ".opencode/skills/mcp-tooling/mcp-mobbin". Inspect the command and pinned source before running it.
Static rules flagged network, read-files in the source; the page lists the matching lines and excerpts.
Alternatives
coreyhaines31/marketingskills
When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use when the user mentions "A/B test," "split test," "experiment," "test this change," "variant copy," "multivariate test," "hypothesis," "should I test this," "which version is better," "test two versions," "statistical significance," "how long should I run this test," "growth experiments," "experiment velocity," "experiment backlog," "ICE score," "experimentation program
narrative-io/narrative-skills-marketplace
Translate a fuzzy analytical question into a rigorous investigation plan. Interrogates the ask, grounds the plan in the available data dictionary, applies analytical best practices, and produces a structured brief of query specifications for a downstream query-writing skill. Plans, does not write SQL. Use when: "why did X drop", "is there a relationship between A and B", "who are our highest-value customers", "what's driving the change in Y", "investigate this trend", "design an analysis for", "
brucesongs/kali-claw
Insecure Design (OWASP A06:2025) focuses on security flaws in system architecture and design phases, rather than code implementation-level bugs.
NintendaDev/unikit-ai
Generate and maintain the project's TECHNICAL documentation from its codebase — scans the project structure, tech stack, and module boundaries, then writes a lean README landing page plus detailed topic pages (architecture, modules, setup, build, APIs), only the docs that are relevant. Use whenever the user wants to create, update, or validate documentation of the CODE or the project itself, e.g. "generate documentation", "create docs", "write the README", "update the project docs", "document th