Skip to content

Security Policies

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

{
"security": {
"blocked_plugins": [],
"blocked_mcp_servers": [],
"blocked_base_images": [],
"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.

PatternMatches
malicious-*malicious-tool, malicious-plugin
*experimental*experimental-v1, my-experimental-tool
*beta*feature-beta, beta-release
untrusted-toolExact match only

Block MCP servers by name or URL pattern:

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

Both server names and URL domains are matched against these patterns.

Block Docker base images:

{
"security": {
"blocked_base_images": [
"*:latest",
"docker.io/*",
"untrusted-registry.com/*"
]
}
}

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

{
"defaults": {}
}

Missing or undefined = all plugins allowed.

SCC enforces two invariants at config validation:

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

If these invariants are violated, config validation fails.

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*"
],
"blocked_base_images": [
"*:latest",
"docker.io/*"
],
"allow_stdio_mcp": false
},
"defaults": {
"allowed_plugins": [
"*@sandboxed-code-official",
"*@internal"
]
}
}

See what’s blocked:

Terminal window
scc config explain --field blocked_items

Output shows which patterns blocked which resources:

blocked_items:
- experimental-tool (blocked_by: *experimental*, source: org.security)
- beta-plugin (blocked_by: *beta*, source: org.security)