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.
Author, revise, or debug Open Session dynamic workflow scripts.
$ npx skills add tellahq/opensession --skill workflow-authoring -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install tellahq/opensession workflow-authoring --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/tellahq/opensession.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/workflow-authoring .claude/skills/workflow-authoring && 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 "workflow-authoring" agent skill from https://github.com/tellahq/opensession/tree/main/.agents/skills/workflow-authoring into .claude/skills/workflow-authoring/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "workflow-authoring", 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/tellahq/opensession/tree/main/.agents/skills/workflow-authoringType 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 tellahq/opensession --skill workflow-authoring -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install tellahq/opensession workflow-authoring --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tellahq/opensession.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/workflow-authoring .agents/skills/workflow-authoring && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "workflow-authoring" agent skill from https://github.com/tellahq/opensession/tree/main/.agents/skills/workflow-authoring into .agents/skills/workflow-authoring/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "workflow-authoring", 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 tellahq/opensession --skill workflow-authoring -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install tellahq/opensession workflow-authoring --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tellahq/opensession.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/workflow-authoring .cursor/skills/workflow-authoring && 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 "workflow-authoring" agent skill from https://github.com/tellahq/opensession/tree/main/.agents/skills/workflow-authoring into .cursor/skills/workflow-authoring/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "workflow-authoring", 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/tellahq/opensession.git --path .agents/skills/workflow-authoring--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 tellahq/opensession --skill workflow-authoring -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install tellahq/opensession workflow-authoring --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tellahq/opensession.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/workflow-authoring .gemini/skills/workflow-authoring && 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 "workflow-authoring" agent skill from https://github.com/tellahq/opensession/tree/main/.agents/skills/workflow-authoring into .gemini/skills/workflow-authoring/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "workflow-authoring", 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 tellahq/opensession workflow-authoringInstalls 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 tellahq/opensession --skill workflow-authoring -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/tellahq/opensession.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/workflow-authoring .github/skills/workflow-authoring && 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 "workflow-authoring" agent skill from https://github.com/tellahq/opensession/tree/main/.agents/skills/workflow-authoring into .github/skills/workflow-authoring/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "workflow-authoring", 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 tellahq/opensession --skill workflow-authoring -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install tellahq/opensession workflow-authoring --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tellahq/opensession.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/workflow-authoring .opencode/skills/workflow-authoring && 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 "workflow-authoring" agent skill from https://github.com/tellahq/opensession/tree/main/.agents/skills/workflow-authoring into .opencode/skills/workflow-authoring/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "workflow-authoring", 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.
workflow-authoringAuthor, revise, or debug Open Session dynamic workflow scripts.
Workflow Authoring is an agent skill from tellahq/opensession. Author, revise, or debug Open Session dynamic workflow scripts. Use before writing a non-trivial runworkflow script, choosing agent versus MCP calls, using parallel or pipeline fan-out, spawning durable child sessions, or designing replay-safe workflow logic.
Its SKILL.md is about 2.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It works with Model Context Protocol. The licence is MIT.
10 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 068618d. 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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are javascript).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
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.
Workflow Authoring loads about 2.8k tokens when it runs. Until then it costs about 70 tokens; SKILL.md has 1,116 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 tellahq/opensession at commit 068618d, republished under its MIT licence (© tellahq). 1,116 words, ~2,769 tokens.
.claude/skills/workflow-authoring/SKILL.md (or your agent's skills folder).Use this guide when a task benefits from deterministic fan-out across many focused agents, direct MCP data calls, or durable child sessions. Do not use a workflow for one small sequential task that the current session can do directly.
Call mcp__opensession-workflows__workflow_capabilities when model choice or run size matters. It returns the live model ids, default model, concurrency, lifetime, timeout, and child-session limits. Do not guess model ids or copy an old model list into a script.
Pass plain JavaScript, not TypeScript, to run_workflow. Do not use imports. Export meta, then write the async body with top-level await and return:
export const meta = {
name: "route-audit",
description: "Audit routes for missing auth checks",
phases: [{ title: "List" }, { title: "Audit" }, { title: "Rank" }],
};
phase("List");
const files = await agent("List the route files. Return only a JSON array.", {
schema: { type: "array", items: { type: "string" } },
});
if (!files) return "Listing failed";
phase("Audit");
const findings = await parallel(
files.map(
(file) => () =>
agent(`Read ${file} and report missing auth or validation checks.`, {
label: file,
}),
),
);
phase("Rank");
return findings.filter(Boolean);meta.name is required and should be a short slug. description and phases are optional. Predeclared phases make progress understandable before work reaches them.
agent(prompt, opts?)Run one focused model turn. Agents begin with no conversation context, so every prompt must include the paths, constraints, and output contract it needs.
Options:
{
label, // short progress label
phase, // phase override for this call
schema, // JSON Schema; returns parsed validated data
model, // current model id from workflow_capabilities
effort, // low, medium, high, xhigh, or max when supported
write, // opt into a branch-producing write agent
}A successful unstructured call resolves to final text. A schema call resolves to the parsed value. An errored call resolves to null, so filter nulls before synthesis. Unsupported effort levels are ignored rather than failing the call.
Agents are read-only by default. Use write only when a lightweight branch-producing agent is sufficient. A successful write call returns an object containing text, structured, seq, branch, worktreeDir, changed, files, insertions, and deletions. Use a durable child session when work needs an inspectable transcript, steering, a worktree, or a pull request.
merge(writeResults)Land selected write-agent branches back onto the session branch, sequentially. Pass one write result, an array of results, or bare { seq, branch } items. Null, unchanged, and branchless values are ignored.
const edits = await parallel(
files.map(
(file) => () =>
agent(`Fix the issue in ${file} and commit the change.`, {
label: file,
write: true,
}),
),
);
const merged = await merge(edits);
return merged;The result is { merged, conflicts, skipped, error }. A conflicted branch is reported instead of rejecting the whole batch, and the remaining branches continue. Inspect the result rather than assuming every write landed.
parallel([...thunks])Run zero-argument functions concurrently and wait for all results:
const reports = await parallel(
files.map(
(file) => () => agent(`Audit ${file}`, { label: file, phase: "Audit" }),
),
);Pass thunks, not already-started promises. A thrown thunk becomes null and does not reject the batch.
pipeline(items, ...stages)Run a per-item stage chain without a global barrier. Item B may start stage 2 while item A is still in stage 1. Each stage receives (previousResult, originalItem, index). A throwing stage drops that item to null and skips its remaining stages.
const findings = await pipeline(
files,
(file) => agent(`Inspect ${file}`, { label: file }),
(report, file) => (report && report !== "none" ? `${file}: ${report}` : null),
);Use parallel for one independent pass. Use pipeline when each item has a sequence of dependent transformations and early filtering should free capacity for other items.
Call tools from the script without spending a model turn:
const alerts = await mcp.grafana.list_alert_groups({ state: "new" });
const issues = await mcp.linear.list_issues({ team: "ENG" });Available forms:
mcp.<server>.<tool>(args)mcp.call(server, tool, args) for dynamic namesmcp.servers() to list the script's allowed serversmcp.tools(server) to return tool names, descriptions, and input schemasA direct call returns the structured result, or parses text as JSON when possible. It rejects on failure. Catch failures explicitly or run calls inside parallel, where a throw degrades to null.
The script receives the current run's policy-scoped MCP surface. Per-user restrictions still apply, and confirmation-gated tools are unavailable.
phase(title) sets the progress group for subsequent calls.log(message) appends a short narrator line to the live progress feed.args is the parsed args_json value passed to run_workflow.budget exposes { total, spent(), remaining() } for the optional advisory output-token budget.Pass timestamps, seeds, file lists, and other varying inputs through args so a resumed run receives the same values.
Use direct mcp.* for retrieval and mutation that a connected tool already performs. Use agent() only when the step needs judgement, such as reading code, reconciling evidence, classifying, ranking, or synthesizing.
Filter and join data in JavaScript before sending it to agents. Every row removed in the script is context and model work not spent.
export const meta = { name: "alert-triage" };
const alerts = await mcp.grafana.list_alert_groups({ state: "new" });
const issues = await mcp.linear.list_issues({ team: "ENG", state: "started" });
const unclaimed = alerts.filter(
(alert) => !issues.some((issue) => issue.title.includes(alert.title)),
);
log(`${unclaimed.length} unclaimed of ${alerts.length}`);
return await parallel(
unclaimed.map(
(alert) => () =>
agent(
`Assess this alert and suggest an owner: ${JSON.stringify(alert)}`,
{
label: alert.id,
},
),
),
);Use spawnSession() for code work that needs a visible, durable Open Session with its own transcript, branch, worktree, steering, and PR lifecycle.
const child = await spawnSession({
prompt: "Implement the auth fix and open a PR. Do not merge it.",
repo: "tellahq/example",
mode: "code",
workspace: { type: "isolated-worktree", baseRef: "main" },
});
const pushed = await waitSession(child.id, {
until: "branch_pushed",
timeout: 30 * 60_000,
});
return pushed;Session API:
spawnSession({ prompt, repo, mode?, workspace?, branch? }) returns { id, url, repo, branch, parentSessionId } once the visible session exists.sessionStatus(id) returns current status, branch/worktree, and PR data.waitSession(id, { until, timeout? }) waits for lifecycle or PR milestones, including pr_checks_passed, pr_checks_failed, pr_changes_requested, pr_approved, and pr_merged.sendToSession(id, message) steers a child spawned by this workflow.autofixSession(id, reason?) queues the standard review and failing-CI fix handoff for a child with a PR.cancelSession(id) cancels a child spawned by this workflow.reconcileSessions(desired, opts) maintains a refillable child pool with bounded concurrency and optional durable retries.workflowState.get(key) / workflowState.compareAndSet(key, version, value) provide replay-lineage-scoped CAS state.Use spawnSession({ ..., runner, admission: { tokens, costUsd } }) when work needs a specific authorized Runner and up-front budget reservation.
For dependent branches, wait for the base child to push, then create an isolated worktree with baseSessionId instead of baseRef.
Nested sessions inherit the parent session's user, repositories, model/account, and MCP scope. They cannot merge. A human owns every merge decision.
Completed agent(), mcp.*, and session API calls are journaled. Resume and restart recovery replay matching completed calls instead of firing them again. spawnSession() also uses a stable durable creation identity, so a crash between child creation and journaling does not duplicate the session, branch, or worktree.
Keep scripts deterministic:
Date.now(), argumentless new Date(), and Math.random() throw. Pass timestamps and seeds through args.args or a journaled MCP call.A paused workflow stops active agents cleanly and preserves the journal. Resume continues it in place. Recovery after a process restart creates a new lineage run that replays completed journal entries and re-adopts durable child sessions.
Call workflow_capabilities immediately before choosing a non-default model. Prefer the default unless a phase has a clear reason to differ.
Use stronger reasoning for verification, ranking, architecture, and synthesis. Use lower effort for mechanical extraction or classification. Avoid spreading the strongest model and highest effort across every fan-out item when one final verifier can evaluate cheaper parallel results.
Before calling run_workflow:
workflow_capabilities if model choice or run size matters.parallel; use pipeline for dependent per-item stages.args.workflow_status after launch.© tellahq, MIT. 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/workflow-authoring of tellahq/opensession.
Open the folder on GitHubat commit 068618d
Workflow Authoring 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 |
|---|---|---|---|---|---|---|
| Workflow Authoring this skilltellahq/opensession | 394 | — | ~2.8k | Automated safety check: Pass | MIT | |
| MCP Server Builderanthropics/skills | 180k | 63 repos | ~2.3k | Automated safety check: Pass | Apache-2.0 | |
| MCP Server BuildershareAI-lab/learn-claude-code | 78k | 4 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 | |
| Figma use_figma Plugin API Ruleswarpdotdev/warp | 65k | 4 repos | ~4.4k | Automated safety check: Pass | AGPL-3.0 | |
| Stitch to Remotion Walkthrough Videosgoogle-labs-code/stitch-skills | 8.5k | 6 repos | ~3.2k | Automated safety check: Notes | Apache-2.0 |
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.
warpdotdev/warp
Required groundwork before any use_figma call: the rules and reference files for running JavaScript in a Figma file through the Plugin API without common failures.
google-labs-code/stitch-skills
Builds walkthrough videos from Stitch design projects using Remotion, with transitions, zoom effects and text overlays on each screen.
coollabsio/coolify
A skill your agent uses for Laravel MCP development. An agent skill from coollabsio/coolify.
tellahq/opensession
Write idiomatic Effect v4 TypeScript verified against the pinned effect@4.0.0-rc.112 source.
tellahq/opensession
Spawn three parallel review child sessions over the active transcript, surface learnings, and route each to a concrete edit on an existing skill.
tellahq/opensession
Help the user understand the current topic visually with concise diagrams, code-shape sketches, and focused HTML artifacts.
tellahq/opensession
A skill your agent uses for "automate me", "create/update/refresh my -mode skill", "turn/capture my preferences or working style into a skill", or wanting agents to follow how the user works.
tellahq/opensession
Auto-fix a PR — address ALL reviewers' open feedback + failing CI, push, and reply in each addressed thread with honest attribution
tellahq/opensession
Fan out N parallel workers, drain them, and return one report.
Works with
Author, revise, or debug Open Session dynamic workflow scripts. Workflow Authoring is an agent skill from tellahq/opensession. Author, revise, or debug Open Session dynamic workflow scripts.
Run `npx skills add tellahq/opensession --skill workflow-authoring -a claude-code`. Or copy the skill folder (.agents/skills/workflow-authoring in tellahq/opensession) into .claude/skills/workflow-authoring in your project. Claude Code loads it when a task matches its description.
Run `npx skills add tellahq/opensession --skill workflow-authoring -a codex`. Or copy the skill folder (.agents/skills/workflow-authoring in tellahq/opensession) into .agents/skills/workflow-authoring 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 tellahq/opensession --skill workflow-authoring -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/workflow-authoring, .gemini/skills/workflow-authoring, .github/skills/workflow-authoring and .opencode/skills/workflow-authoring in your project.
SKILL.md names no scripts, command-line tools or credentials: Workflow Authoring is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. 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.
Workflow Authoring is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.8k tokens (SKILL.md is roughly 11k 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 Workflow Authoring: 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 Figma use_figma Plugin API Rules (warpdotdev/warp, 65k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
tellahq (a GitHub organization) maintains it in tellahq/opensession, which has 394 GitHub stars. The repository holds 15 skills in this directory. The repository was last updated on October 9, 2026.
Source: tellahq/opensession on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.