Babysitter is a workflow engine for AI coding agents that enforces predefined steps, quality checks, human approvals, and decision records. It is used to coordinate complex, repeatable agent workflows across supported coding tools. The catalogue contains skills, agents, instructions, settings, a plugin, and an MCP integration for its workflow.
Getting it into your agent
It runs from inside its repository, so the clone comes first — what it calls does not travel with the file alone.
git clone --depth 1 https://github.com/a5c-ai/babysitternpx agentmods add skills/a5c-ai/babysitter/mcp-tool-resource-patternWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/a5c-ai/babysitter/mcp-tool-resource-pattern)<a href="https://agentmods.dev/skills/a5c-ai/babysitter/mcp-tool-resource-pattern"><img src="https://agentmods.dev/badge/skills/a5c-ai/babysitter/mcp-tool-resource-pattern/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/a5c-ai/babysitter/mcp-tool-resource-pattern"><img src="https://agentmods.dev/badge/skills/a5c-ai/babysitter/mcp-tool-resource-pattern.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector pass
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00049 | $0.02527 |
| Opus 5 | $0.00024 | $0.01264 |
| Sonnet 5 | $0.00010 | $0.00505 |
| Haiku 4.5 | $0.00005 | $0.00253 |
Grade A, and why
mcp-tool-resource-pattern scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 4d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 339 lines — stays where its author put it; the contents beside it link to each section on GitHub.
mcp-tool-resource-pattern
Implement the foundational Tool + Resource pattern that every MCP App requires: a Tool that returns data and references a Resource that serves the interactive UI.
Overview
Every MCP App is built on the Tool + Resource pattern:
- Tool (registered via
registerAppTool): Called by the LLM/host, returns data. Its_meta.ui.resourceUritells the host which Resource provides the UI. - Resource (registered via
registerAppResource): Serves a bundled HTML file that renders the interactive UI in a sandboxed iframe. - The tool passes data to the UI via
structuredContent(available inontoolresulthandler). - The tool MUST also return a
contentarray with text fallback for non-UI hosts.
Capabilities
registerAppTool Implementation
- Register tools with
_meta.ui.resourceUrilinking to a resource - Pass data via
structuredContentfor rich UI rendering - Always include
contentarray with text fallback - Configure tool input schemas via Zod
registerAppResource Implementation
- Register HTML resources with
RESOURCE_MIME_TYPE - Serve single-file bundled HTML
- Configure CSP domains in
contents[]return - Support multiple tools sharing the same resource URI
App-Only Helper Tools
- Create tools with
visibility: ['app']-- only callable from the UI iframe, not by the LLM - Use cases: polling for updates, loading additional data, pagination, state mutations
- Implement via
app.callServerTool()from client-side
Graceful Degradation
- Detect UI capability via
getUiCapability()on the server - Return richer responses when UI is available
- Always maintain text-only fallback path
Usage
Basic Tool + Resource Pattern
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import {
registerAppTool,
registerAppResource,
RESOURCE_MIME_TYPE,
} from '@modelcontextprotocol/ext-apps';
import { z } from 'zod';
import fs from 'fs';
import path from 'path';
const server = new McpServer({ name: 'my-app', version: '1.0.0' });
// Read the bundled HTML (built by vite-plugin-singlefile)
const bundledHtml = fs.readFileSync(
path.join(__dirname, '../dist/mcp-app.html'),
'utf-8'
);
// 1. Register the Resource (serves the UI)
registerAppResource(server, {
uri: 'app:///my-app',
name: 'My App UI',
mimeType: RESOURCE_MIME_TYPE,
async read() {
return {
contents: [{
uri: 'app:///my-app',
mimeType: RESOURCE_MIME_TYPE,
text: bundledHtml,
// CSP domains (if needed)
// resourceDomains: ['https://cdn.example.com'],
// connectDomains: ['https://api.example.com'],
}],
};
},
});
// 2. Register the Tool (returns data, references the resource)
registerAppTool(server, {
name: 'show_dashboard',
description: 'Show an interactive dashboard',
inputSchema: {
type: 'object' as const,
properties: {
query: { type: 'string', description: 'Search query' },
},
required: ['query'],
},
// _meta.ui.resourceUri is set automatically by registerAppTool
resourceUri: 'app:///my-app',
async handler(args) {
const data = await fetchDashboardData(args.query);
return {
// Text fallback for non-UI hosts (REQUIRED)
content: [
{
type: 'text' as const,
text: `Dashboard results for "${args.query}":\n${formatAsText(data)}`,
},
],
// Rich data for the UI (available in ontoolresult handler)
structuredContent: {
query: args.query,
results: data.results,
metadata: data.metadata,
},
};
},
});
What ships with it
1 file beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 4d ago First seen · 339 lines · 49 tokens per session scan A f3dc2e09d66c
mcp-tool-resource-pattern is a skill published in the GitHub repository a5c-ai/babysitter (1,778 stars, last pushed 3d ago), licensed MIT. It adds 49 tokens to every session and 2,527 once invoked, about $0.0002 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-05.
Other skills, from other repositories
tutti-agent-workspace-app
Build or evolve a complex agent-enabled Tutti workspace app repository. Use for Tutti apps with web/server/shared monorepos, @tutti-os/agent-acp-kit local agent runtimes, kit-owned TUTTICLI agent/composer discovery, dynamic agent catalogs, run-scoped MCP tool gateways, app-owned package builders, web-first debugging…
goga-cookbook
Principles for applying DSL specification in cell and CODEMANIFEST design.
version-bump
Version the Team plugin at land time (DEV-internal, not distributed): decide the SemVer level, compute the next free version against current main, update all six version strings, cut the [Unreleased] changelog body into a dated [X.Y.Z] section, run the land-time consistency assertion, and commit chore(version): X.Y.Z.…
rn-testing
This skill should be used when the user asks to "write a Maestro test", "create E2E flows", "add testIDs", "run UI tests", "run E2E tests", "verify a feature works", "test my screen", "set up maestro-runner", "mock network requests", "inspect store state", "write test assertions", or needs guidance on test timing…
goga-review-plan
Verify execution plan completeness and correctness.
goga-brainstorm
Pipeline orchestrator for brainstorming the cells architecture.