Simple Stack
User story
As an engineer running an AI workload locally, I want one stack file that supervises the MCP servers and agents I need — pulling tools, prompts, and models together — so that one command brings the whole environment up and another tears it down, without me managing each process by hand.
Goals
- One stack file describes every MCP server and agent.
- One command (
smithy stack up) starts the daemon and supervises the lot; one command (smithy stack down) stops everything. - Per-service configs (
*.mcpsmithy.yaml,*.agentsmithy.yaml) stay where they are; the stack file just points at them. - Logs, status, and chat all flow through
smithy— no need to attach to individual processes.
Technical overview
Topology: any number of mcps: and any number of agents: in a
single stack. The smithy daemon supervises both kinds; restart
policy, env-file loading, and logging work the same way for either.
Workflow:
- Author each MCP config with
mcpsmithy setup(or by hand). - Author each agent config with
agentsmithy setup(or by hand). - Author the stack file with
smithy stack setup(or by hand) — it lists each service with its config path, transport, and address. smithy stack validateto check before starting.smithy stack upto bring everything online.smithy agent chat <name>to talk to an agent. Chat works for agents whosetransport:isa2a(default; full history) ormcp-http(single tool call per turn, no history replay);mcp-stdioandstdioagents need to be driven directly withsmithy agent serveuntil supervisor-side relay lands.smithy stack downto stop everything.
Scaling up: the same stack file scales from "one MCP, one agent" to multi-agent workloads with shared MCPs. Per-agent transports, addresses, and env files keep the services isolated; the stack file remains the single source of truth.
For full field reference, see the config reference.
Run smithy stack setup and describe the topology. Before
prompting, have ready:
- The MCP servers you want to run (config path, transport, port)
- The agents that should connect to them (config path, transport)
- Any env files the daemon should load before starting services
Then use a prompt like:
Set up a stack with one MCP server
fetchserving./fetch.mcpsmithy.yamlover HTTP on port 8081, and one agentassistantserving./assistant.agentsmithy.yamlover A2A on port 9090. Load.envautomatically.
See Guided Setup for the full workflow.