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
MCP is a standard protocol for connecting LLM applications to tools. Perstack runs MCP servers as subprocesses and manages their lifecycle.
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)
Connect to MCP servers over HTTP.
[experts."analyst".skills."remote-api"]
type = "mcpSseSkill"
endpoint = "https://api.example.com/mcp"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
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
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
- Examples — see skills in context
- Base Skill — built-in tools available to all Experts
- perstack.toml Reference — complete field reference