All tools return JSON-encoded results as text content. Each result follows the same discriminated union pattern used by the core library.
facet-list
List all facets declared by the project with their name, version, description, and install status.
Input: None
Output: JSON-encoded ListResult:
{
"facets": [
{
"name": "viper",
"version": "1.2.0",
"description": "Planning and execution framework",
"source": "remote",
"installed": true,
"requires": ["gh --version"],
"resources": [
{ "type": "skill", "name": "viper-planning" },
{ "type": "agent", "name": "viper-agent" }
]
}
]
}
facet-add
Cache a remote facet by URL, making it available to install.
Input:
| Parameter | Type | Description |
|---|
url | string | URL of the remote facet.yaml manifest |
Output: JSON-encoded CacheResult:
// Success
{ "success": true, "name": "viper", "version": "1.2.0" }
// Error
{ "success": false, "error": "Failed to fetch manifest: ..." }
facet-install
Install a facet by name, making its resources active in the project.
Input:
| Parameter | Type | Description |
|---|
name | string | Name of the facet to install |
Output: JSON-encoded InstallResult:
// Success
{
"success": true,
"facet": "viper",
"resources": [
{ "name": "viper-planning", "type": "skill" },
{ "name": "viper-agent", "type": "agent" }
]
}
// Not found
{ "success": false, "facet": "viper", "reason": "not_found" }
When called through MCP, prerequisite approval is skipped (onPrereqApproval is not provided).
Prereq checks still run if previously confirmed.
facet-update
Re-fetch a cached remote facet to check for updates.
Input:
| Parameter | Type | Description |
|---|
name | string | Name of the remote facet to update |
Output: JSON-encoded UpdateResult:
// Updated
{ "success": true, "name": "viper", "version": "1.3.0", "updated": true }
// Already current
{ "success": true, "name": "viper", "version": "1.2.0", "updated": false }
// Error
{ "success": false, "name": "viper", "error": "No remote facet named \"viper\" declared" }
facet-remove
Remove a facet from the project, uninstalling its resources and removing it from dependencies.
Input:
| Parameter | Type | Description |
|---|
name | string | Name of the facet to remove |
Output: JSON-encoded UninstallResult:
// Success
{
"success": true,
"facet": "viper",
"removed": [
{ "name": "viper-planning", "type": "skill" },
{ "name": "viper-agent", "type": "agent" }
]
}
// Not found
{ "success": false, "facet": "viper", "reason": "not_found" }