Skip to content

Security Policies

Security policies define absolute boundaries that no team or project can override.

{
"security": {
"blocked_plugins": [],
"blocked_mcp_servers": [],
"allow_stdio_mcp": false,
"allowed_stdio_prefixes": []
}
}

Block plugins by name pattern:

{
"security": {
"blocked_plugins": [
"malicious-*",
"*experimental*",
"*beta*",
"untrusted-tool"
]
}
}

Patterns use glob syntax (fnmatch) with case-insensitive matching. Patterns without @ match the plugin name across all marketplaces. Use @marketplace to target a specific marketplace.

PatternMatches
malicious-*malicious-tool, malicious-plugin
*experimental*experimental-v1, my-experimental-tool
*beta*feature-beta, beta-release
untrusted-tooluntrusted-tool@any-marketplace

Block MCP servers by name, URL, domain, or stdio command pattern:

{
"security": {
"blocked_mcp_servers": [
"*.untrusted.com",
"insecure-api",
"*localhost*"
]
}
}

Patterns are matched against:

  • Server name
  • Full URL
  • URL domain
  • Stdio command path

The defaults.allowed_plugins field controls which plugins can be enabled (governance whitelist):

{
"defaults": {}
}

Missing or undefined = all plugins allowed.

SCC enforces these invariants at runtime when computing effective config:

  1. enabled ⊆ allowed: Enabled plugins must be in the allowed list
  2. enabled ∩ blocked = ∅: Enabled plugins must not be blocked by security

Violations are surfaced as blocked/denied items in scc config explain. scc org validate does not currently fail on these invariants.

Stdio MCP servers run local processes with elevated privileges. They’re disabled by default:

{
"security": {
"allow_stdio_mcp": false
}
}

To enable with restrictions:

{
"security": {
"allow_stdio_mcp": true,
"allowed_stdio_prefixes": [
"/usr/local/bin/",
"/opt/approved-tools/"
]
}
}
SettingEffect
allow_stdio_mcp: falseAll stdio servers blocked
allow_stdio_mcp: true + no prefixesAny absolute path allowed
allow_stdio_mcp: true + prefixesOnly matching paths allowed

Understanding the trust model is critical:

Servers declared in org/team/project config:

  • blocked_mcp_servers patterns apply
  • allow_stdio_mcp gate applies
  • allowed_stdio_prefixes validation applies
  • Delegation controls who can add them

Servers inside plugin .mcp.json files:

  • Not governed by blocked_mcp_servers
  • To restrict, block the entire plugin
  • Plugins are atomic trust units
{
"security": {
"blocked_plugins": [
"*experimental*",
"*beta*",
"*untrusted*",
"*malicious*"
],
"blocked_mcp_servers": [
"*.untrusted.com",
"*localhost*",
"*127.0.0.1*"
],
"allow_stdio_mcp": false
},
"defaults": {
"allowed_plugins": [
"*@sandboxed-code-official",
"*@internal"
]
}
}

See what’s blocked:

Terminal window
scc config explain --field blocked

Use --json for machine-readable details:

Terminal window
scc config explain --json | jq '.data.blocked_items'