A project structure for Claude extensions that have outgrown a single file.
MCP Prompts = source code (operational reasoning, portable) MCP Tools = runtime libraries (state + execution, portable) MCP Apps = UI framework (interactive views, portable) Platform skill = compiler flags (thin per-platform wrapper) Claude/ChatGPT = the compiler
Prompts ──provides──> ["analysis-request"] | Tools ──provides──> ["sec-filings", "comps-table"] | Apps ──consumes──> ["comps-table", "analysis-request"] Skills ──targets───> ["claude", "gpt"] Compiler (Claude, GPT, Gemini, Llama) links it all at runtime.
Reasoning logic. What to think about and what output shape to produce.
Runtime execution. APIs, databases, computation engines with typed schemas.
Interactive views. Dashboards, reports, forms that consume contract schemas.
Platform adaptation. Thin wrappers for Claude, GPT, Cursor, etc.
# Install the CLI
pip install mcpc-cli
# Scaffold a new bundle
mcpc init my-workflow
# Validate contracts
mcpc validate
# Pack for distribution
mcpc pack
A small Claude extension is a single prompt file. Anything useful grows past that — a tool server, a UI, schemas, platform hints. Past a certain size, the layers start bleeding into each other: prompts name tools directly, tool servers grow reasoning, UIs render fields schemas no longer have, platform adaptation scatters.
MCP Contract is the layout that stops the drift. Four layers with explicit boundaries, a manifest that declares what each layer publishes and consumes, and a CLI that validates it. No custom schema language. No new runtime. Think create-react-app for Claude extensions.
Typed contracts also permit cross-bundle composition downstream — but that's a consequence of the structure, not the reason to adopt it today.
Synth Ops is an intelligent infrastructure operations system built as an MCP Contract bundle.
The manifest schema is hosted at mcpcontracts.com/schema/0.1.0.json for editor validation.