Skills
Skills
Section titled “Skills”Skills give Experts access to external tools via MCP (Model Context Protocol).
| Type | Use case |
|---|---|
mcpStdioSkill | Connect to MCP servers via command line |
mcpSseSkill | Connect to MCP servers via HTTP (Server-Sent Events) |
interactiveSkill | Define custom tools that pause for user input |
MCP Skills
Section titled “MCP Skills”MCP is a standard protocol for connecting LLM applications to tools. Perstack runs MCP servers as subprocesses and manages their lifecycle.
STDIO (most common)
Section titled “STDIO (most common)”Run an MCP server as a subprocess. Works with npm packages, Python modules, or any executable.
[experts."researcher".skills."web-search"]type = "mcpStdioSkill"command = "npx"packageName = "exa-mcp-server"requiredEnv = ["EXA_API_KEY"]The package is auto-installed at runtime.
SSE (remote servers)
Section titled “SSE (remote servers)”Connect to MCP servers over HTTP.
[experts."analyst".skills."remote-api"]type = "mcpSseSkill"endpoint = "https://api.example.com/mcp"Why minimal privilege matters
Section titled “Why minimal privilege matters”MCP servers are like npm packages — anyone can publish them, and they’re not reviewed. They often handle sensitive data like API keys. Perstack applies minimal privilege by default:
- Environment variables: Only those listed in
requiredEnvare passed to the server - Tool access: Use
pick/omitto control which tools are available - Lifecycle: Runtime starts and stops servers on demand — no persistent daemons
[experts."editor".skills."filesystem"]type = "mcpStdioSkill"command = "npx"packageName = "some-mcp-server"requiredEnv = ["WORKSPACE_PATH"]pick = ["read_file", "write_file"]omit = ["delete_file"]You define what each MCP server can access. The runtime enforces it.
Interactive Skills
Section titled “Interactive Skills”Define custom tools that pause execution and wait for external input.
User input — Ask users for confirmation or choices:
[experts."wizard".skills."interaction"]type = "interactiveSkill"
[experts."wizard".skills."interaction".tools."askChoice"]description = "Ask user to choose from options"inputJsonSchema = """{ "type": "object", "properties": { "question": { "type": "string" } } }"""Application integration — Let your app handle operations:
[experts."assistant".skills."app"]type = "interactiveSkill"
[experts."assistant".skills."app".tools."addToCart"]description = "Add product to cart"inputJsonSchema = """{ "type": "object", "properties": { "productId": { "type": "string" } } }"""When an interactive tool is called, execution pauses and returns control to the caller.
Adding usage rules
Section titled “Adding usage rules”Use rule to guide how the LLM uses the skill:
[experts."researcher".skills."web-search"]type = "mcpStdioSkill"command = "npx"packageName = "exa-mcp-server"rule = "Prefer .edu and .gov sources. Avoid user-generated content."What’s next
Section titled “What’s next”- Examples — see skills in context
- Base Skill — built-in tools available to all Experts
- perstack.toml Reference — complete field reference