MCP Server Builder
anthropics/skills
Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.
Design the domain model for the Stitch SDK. An agent skill from google-labs-code/stitch-sdk.
$ npx skills add google-labs-code/stitch-sdk --skill stitch-sdk-domain-design -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install google-labs-code/stitch-sdk stitch-sdk-domain-design --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/google-labs-code/stitch-sdk.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/stitch-sdk-domain-design .claude/skills/stitch-sdk-domain-design && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "stitch-sdk-domain-design" agent skill from https://github.com/google-labs-code/stitch-sdk/tree/main/.agents/skills/stitch-sdk-domain-design into .claude/skills/stitch-sdk-domain-design/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "stitch-sdk-domain-design", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/google-labs-code/stitch-sdk/tree/main/.agents/skills/stitch-sdk-domain-designType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add google-labs-code/stitch-sdk --skill stitch-sdk-domain-design -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install google-labs-code/stitch-sdk stitch-sdk-domain-design --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/google-labs-code/stitch-sdk.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/stitch-sdk-domain-design .agents/skills/stitch-sdk-domain-design && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "stitch-sdk-domain-design" agent skill from https://github.com/google-labs-code/stitch-sdk/tree/main/.agents/skills/stitch-sdk-domain-design into .agents/skills/stitch-sdk-domain-design/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "stitch-sdk-domain-design", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add google-labs-code/stitch-sdk --skill stitch-sdk-domain-design -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install google-labs-code/stitch-sdk stitch-sdk-domain-design --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/google-labs-code/stitch-sdk.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/stitch-sdk-domain-design .cursor/skills/stitch-sdk-domain-design && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "stitch-sdk-domain-design" agent skill from https://github.com/google-labs-code/stitch-sdk/tree/main/.agents/skills/stitch-sdk-domain-design into .cursor/skills/stitch-sdk-domain-design/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "stitch-sdk-domain-design", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/google-labs-code/stitch-sdk.git --path .agents/skills/stitch-sdk-domain-design--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add google-labs-code/stitch-sdk --skill stitch-sdk-domain-design -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install google-labs-code/stitch-sdk stitch-sdk-domain-design --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/google-labs-code/stitch-sdk.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/stitch-sdk-domain-design .gemini/skills/stitch-sdk-domain-design && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "stitch-sdk-domain-design" agent skill from https://github.com/google-labs-code/stitch-sdk/tree/main/.agents/skills/stitch-sdk-domain-design into .gemini/skills/stitch-sdk-domain-design/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "stitch-sdk-domain-design", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install google-labs-code/stitch-sdk stitch-sdk-domain-designInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add google-labs-code/stitch-sdk --skill stitch-sdk-domain-design -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/google-labs-code/stitch-sdk.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/stitch-sdk-domain-design .github/skills/stitch-sdk-domain-design && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "stitch-sdk-domain-design" agent skill from https://github.com/google-labs-code/stitch-sdk/tree/main/.agents/skills/stitch-sdk-domain-design into .github/skills/stitch-sdk-domain-design/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "stitch-sdk-domain-design", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add google-labs-code/stitch-sdk --skill stitch-sdk-domain-design -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install google-labs-code/stitch-sdk stitch-sdk-domain-design --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/google-labs-code/stitch-sdk.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/stitch-sdk-domain-design .opencode/skills/stitch-sdk-domain-design && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "stitch-sdk-domain-design" agent skill from https://github.com/google-labs-code/stitch-sdk/tree/main/.agents/skills/stitch-sdk-domain-design into .opencode/skills/stitch-sdk-domain-design/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "stitch-sdk-domain-design", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
stitch-sdk-domain-designDesign the domain model for the Stitch SDK. An agent skill from google-labs-code/stitch-sdk.
Stitch SDK Domain Design is an agent skill from google-labs-code/stitch-sdk, published by the product's own GitHub organization. Design the domain model for the Stitch SDK. Use when mapping MCP tools to domain classes and bindings in domain-map.json. This is Stage 2 of the generation pipeline.
Its SKILL.md is about 2.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
The repository describes itself as: Generate UI screens from text prompts and extract their HTML and screenshots programmatically. The licence is Apache-2.0.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit e3f8ece. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
bunnpxFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npx, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Stitch SDK Domain Design loads about 2.4k tokens when it runs. Until then it costs about 48 tokens; SKILL.md has 793 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from google-labs-code/stitch-sdk at commit e3f8ece, republished under its Apache-2.0 licence (© google-labs-code). 793 words, ~2,437 tokens.
.claude/skills/stitch-sdk-domain-design/SKILL.md (or your agent's skills folder).This skill teaches you how to perform Stage 2 of the generation pipeline: reading tool schemas and producing domain-map.json — the intermediate representation that drives codegen.
tools-manifest.json — raw MCP tool schemas captured from the server (includes outputSchema)ir-schema.ts — Zod schema defining valid domain-map structure (the canonical contract)domain-map.json — the current IR (if extending, not starting fresh)stitch-sdk-development skill — for understanding the pipeline contextA valid domain-map.json with two sections: classes and bindings, validated by ir-schema.ts.
[!IMPORTANT] Your output is validated twice by the codegen: structurally (Zod IR schema) and semantically (projection steps verified against
outputSchemafrom the tools-manifest).
Each class represents a domain entity. Ask: "What noun does the user interact with?"
{
"Stitch": {
"description": "Main entry point. Manages projects.",
"constructorParams": [],
"isRoot": true,
"factories": [
{
"method": "project",
"returns": "Project",
"description": "Create a Project handle from an ID."
}
]
}
}| Field | Purpose | Example |
|---|---|---|
constructorParams | Fields stored on the instance | ["projectId", "screenId"] |
reference | Identity-map keys (.id aliases the LAST key) | { "keys": ["projectId", "screenId"] } |
parentField | Which param is injected from a parent class | "projectId" |
factories | Local factory methods (no API call) | [{ "method": "project", "returns": "Project" }] |
sideEffects | Handwritten extension methods (declared, never generated) | [{ "method": "upload", "reason": "private_rest", "specPath": "src/spec/upload.ts" }] |
extensionPath | Module re-exporting the class with handwritten methods | "../../src/project-ext.js" |
[!IMPORTANT] The IR schema is STRICT. Unknown keys are hard validation errors, not silently ignored. Per-field source-mapping helpers described in older docs were never implemented and do not exist — identity fields are populated by the EntityManager from
reference.keys, resourcenameparsing, andidfallback. If validation rejects a key you expected to exist, the feature does not exist — do not work around it.
Each binding maps one MCP tool to one class method. Ask: "Who owns this action?"
| Type | Meaning | Code generated |
|---|---|---|
self | From this.field | projectId: this.projectId |
param | From method parameter | prompt: prompt |
computed | template interpolation ("template": "projects/{projectId}") | name: \projects/${this.projectId}/screens/${screenId}`` |
selfArray | Wrap self field as array | selectedScreenIds: [this.screenId] |
Optional params use "optional": true. Renamed params use "rename": "newName".
A "default": "VALUE" (requires optional: true) is sent when the caller
omits the value: deviceType: options?.deviceType ?? "DESKTOP".
[!IMPORTANT] Method signature shape (D12): required params are positional, in IR order; ALL optional params are emitted into a single trailing
options?: { ... }object.generate(prompt, options?), nevergenerate(prompt, deviceType?).
The returns.projection array tells codegen how to navigate the API response. Each step is a ProjectionStep:
{ prop: string; index?: number; each?: boolean; find?: string; acknowledgeSingle?: boolean }| Projection | Generated code | Use when |
|---|---|---|
[] (empty) | raw | Direct return (whole response) |
[{ "prop": "projects" }] | raw.projects | Array inside object |
[{ "prop": "outputComponents", "index": 0 }, { "prop": "design" }, { "prop": "screens", "index": 0 }] | raw.outputComponents[0].design.screens[0] | Deeply nested single item |
[{ "prop": "outputComponents", "each": true }, { "prop": "design" }, { "prop": "screens", "each": true }] | flatMap chain | Collect all items across arrays |
[{ "prop": "screenshot" }, { "prop": "downloadUrl" }] | raw.screenshot.downloadUrl | Navigate nested properties |
Decision: Use "index": 0 when extracting a single item. Use "each": true when collecting all items (array result). You cannot use both on the same step. "find": "a.b" scans an array for the first element whose nested path is non-null.
[!TIP] Every
propin a projection is validated against the tool'soutputSchemaat codegen time. If you typo a property name, codegen will fail with a diagnostic listing the available properties. Stepping THROUGH an array withoutindex/each/findis also a codegen error — the emitted chain would beundefinedat runtime.
[!WARNING] Truncation lint: using
indexorfindon an UNBOUNDED array emits a warning — every other element is silently dropped (this exact pattern causedproject.generate()to return one screen of many). Prefer"each": true+"array": true. Only if the result is semantically singular, acknowledge it with"acknowledgeSingle": trueon the step.
When returns.class is set, the extracted data is wrapped in a domain class constructor:
{
"returns": {
"class": "Screen",
"projection": [{ "prop": "screens" }],
"array": true
}
}The codegen automatically spreads parentField into the data if the child class declares one.
Add a cache field with a structured projection to check this.data before calling the API:
{
"cache": {
"projection": [{ "prop": "htmlCode" }, { "prop": "downloadUrl" }],
"description": "Use cached HTML download URL from generation response if available"
}
}When the cached property is a nested object (like File with a downloadUrl), use multiple projection steps to drill into it.
Generated code:
if (this.data?.htmlCode?.downloadUrl) return this.data?.htmlCode?.downloadUrl;
// ... else call APIWhen mapping a new tool, answer these questions:
Which class? Look at which fields the tool requires. If it needs projectId from self, it belongs on Project or Screen. If it needs nothing from self, it belongs on Stitch.
Which method name? Use the verb from the tool name, simplified. generate_screen_from_text → generate. edit_screens → edit.
Arguments from self or param? If the caller already has the data (because they're calling a method on themselves), use self. If they need to provide it, use param.
How deep is the return? Check the tool's outputSchema in tools-manifest.json. Build the projection array step-by-step to navigate to the useful data.
Should it cache? If the data is available from a previous response (like generation), add a cache field with the projection path.
After editing domain-map.json:
bun scripts/generate-sdk.ts # Validates IR + projections, then generates
npx tsc --noEmit # Type check
npx vitest run # Unit tests
bun scripts/e2e-test.ts # E2E tests
bun scripts/validate-generated.ts # Lock integrityIf a projection is invalid, you'll see:
❌ Binding "Project.generate" projection step 2:
property "screenz" not found in outputSchema.
Available properties: screens, components, metadata© google-labs-code, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/stitch-sdk-domain-design of google-labs-code/stitch-sdk.
Open the folder on GitHubat commit e3f8ece
Stitch SDK Domain Design next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Stitch SDK Domain Design this skillgoogle-labs-code/stitch-sdk | 1.8k | — | ~2.4k | Automated safety check: Pass | Apache-2.0 | |
| MCP Server Builderanthropics/skills | 180k | 63 repos | ~2.3k | Automated safety check: Pass | Apache-2.0 | |
| MCP Server BuildershareAI-lab/learn-claude-code | 78k | 5 repos | ~1.2k | Automated safety check: Pass | MIT | |
| MCP Integration for Pluginsanthropics/claude-plugins-official | 38k | 11 repos | ~3.1k | Automated safety check: Pass | Apache-2.0 | |
| MCP Developmentcoollabsio/coolify | 63k | 1 repos | ~949 | Automated safety check: Pass | MIT | |
| Code Design Rationale Investigatorcursor/plugins | 10k | 9 repos | ~2.6k | Automated safety check: Pass | None |
anthropics/skills
Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.
shareAI-lab/learn-claude-code
Walks through building MCP servers in Python or TypeScript that expose tools, resources and prompts to Claude, with templates, registration and testing.
anthropics/claude-plugins-official
Explains how to bundle Model Context Protocol servers in a Claude Code plugin, covering config files, stdio, SSE, HTTP and WebSocket server types, and authentication.
coollabsio/coolify
A skill your agent uses for Laravel MCP development. An agent skill from coollabsio/coolify.
cursor/plugins
Digs into why code is shaped the way it is by checking git history, pull requests and connected tools in parallel, then reporting a cited read on the tradeoffs.
activepieces/activepieces
Analyze application logs from the .evlog/logs/ directory. An agent skill from activepieces/activepieces.
google-labs-code/stitch-sdk
Develop the Stitch SDK. An agent skill from google-labs-code/stitch-sdk.
google-labs-code/stitch-sdk
Run the full Stitch SDK generation pipeline. An agent skill from google-labs-code/stitch-sdk.
google-labs-code/stitch-sdk
Generate or update the README for the Stitch SDK. An agent skill from google-labs-code/stitch-sdk.
google-labs-code/stitch-sdk
Use the Stitch SDK to generate, edit, and iterate on UI screens from text prompts, manage projects, and retrieve screen HTML/images.
google-labs-code/stitch-sdk
Enforces a disciplined Red-Green-Refactor (TDD) workflow in TypeScript/Node.js.
google-labs-code/stitch-sdk
Architecture standard for building robust, type-safe TypeScript services using the "Spec and Handler" pattern.
Design the domain model for the Stitch SDK. An agent skill from google-labs-code/stitch-sdk. Stitch SDK Domain Design is an agent skill from google-labs-code/stitch-sdk, published by the product's own GitHub organization. Design the domain model for the Stitch SDK.
Stitch SDK Domain Design fits situations like: mapping MCP tools to domain classes and bindings in domain-map.json; tasks that involve MCP servers.
Run `npx skills add google-labs-code/stitch-sdk --skill stitch-sdk-domain-design -a claude-code`. Or copy the skill folder (.agents/skills/stitch-sdk-domain-design in google-labs-code/stitch-sdk) into .claude/skills/stitch-sdk-domain-design in your project. Claude Code loads it when a task matches its description.
Run `npx skills add google-labs-code/stitch-sdk --skill stitch-sdk-domain-design -a codex`. Or copy the skill folder (.agents/skills/stitch-sdk-domain-design in google-labs-code/stitch-sdk) into .agents/skills/stitch-sdk-domain-design in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add google-labs-code/stitch-sdk --skill stitch-sdk-domain-design -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/stitch-sdk-domain-design, .gemini/skills/stitch-sdk-domain-design, .github/skills/stitch-sdk-domain-design and .opencode/skills/stitch-sdk-domain-design in your project.
Going by SKILL.md and its folder, Stitch SDK Domain Design needs the command-line tools its instructions call (bun and npx). Our summary lists: Node.js.
SKILL.md contains no URLs. Its commands use npx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Stitch SDK Domain Design is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.4k tokens (SKILL.md is roughly 9.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Stitch SDK Domain Design: MCP Server Builder (anthropics/skills, 180k stars), MCP Server Builder (shareAI-lab/learn-claude-code, 78k stars), MCP Integration for Plugins (anthropics/claude-plugins-official, 38k stars) and MCP Development (coollabsio/coolify, 63k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
google-labs-code (a GitHub organization, an official publisher) maintains it in google-labs-code/stitch-sdk, which has 1,827 GitHub stars. The repository holds 9 skills in this directory. The repository was last updated on October 1, 2026.
Source: google-labs-code/stitch-sdk on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.