Sievant docs
Troubleshooting
Start with sievant doctor: it checks the configuration, the per-user
state, every wrapped server and the policy file it runs under, the
gateway’s ports and certificate (and, with --webhook <url>, the
Kubernetes sidecar injector), and prints the fix for each problem. It is
read-only.
Each entry below starts with what you see. sievant <command> --help
documents every flag, and exit-codes.md the exit codes.
Wrapped servers log to standard error, which MCP clients keep in their
server logs (Claude Desktop: the mcp-server-<name>.log files in its
logs folder; Claude Code: claude --debug; Cursor and VS Code: the MCP
output panel). The lines are JSON with a msg field; the messages
quoted below are those.
A client’s server fails to start after sievant wrap
- The binary moved or was removed. Wrapped entries launch Sievant
by its absolute path (the
commandof the entry). If you uninstalled Sievant or installed it somewhere else, the client cannot start it. Runsievant unwrapwith any working copy of Sievant (it restores the originals from the backups), or wrap again from the new install. this sievant runs from a temporary directory (…), which clients cannot rely on.wraprefuses to write the path of a binary under a temporary directory (for example one built bygo run). Install Sievant, or give--sievant <absolute path>.- The original command fails.
sievant proxystarts the server’s own command; if that fails, so does the wrapped entry. Runsievant unwrapand check that the server starts on its own, then wrap again. no per-user state directory (set HOME, XDG_STATE_HOME or LOCALAPPDATA), so give --audit <path>, orno per-user state directory for the HMAC key, so set SIEVANT_HMAC_KEY. The client starts servers withoutHOME(orLOCALAPPDATAon Windows), so the proxy has nowhere to keep its audit store and key. AddHOMEto the entry’senv; or give the proxy--audit <path>and setSIEVANT_HMAC_KEY(32 bytes or more) in the entry’senv.
sievant wrap left a server as it was
wrap prints the reason for every entry it does not change:
already launched through Sievant: wrapping again changes nothing. To change an entry’s arguments (for example to add--policy), runsievant unwrap, then wrap again.uses the HTTP+SSE transport (2024-11-05), which Sievant does not connect to: Sievant connects to Streamable HTTP. Use the server’s Streamable HTTP endpoint if it has one.remote server with no credential configured: the client probably signs in with OAuth, which Sievant cannot do for it yet: wrapping would break the sign-in, so the entry is left alone.
wrap rewrites client configuration files; give --yes to confirm when not on a terminal
wrap asks before writing. In a script, run sievant wrap --all --dry-run to see the diff, then sievant wrap --all --yes.
sievant unwrap did not restore a file
edited since wrap; not restored: you or the client changed the file
after it was wrapped, and unwrap will not overwrite that edit silently.
sievant unwrap --force restores it anyway and keeps the current
content in the backup. sievant unwrap --list shows every wrap run, and
--backup <id> restores an older one.
A tool disappeared from my client
upstream tool withheld: its definition changed since it was pinned on first use. The server changed the tool’s description or input schema
after you first used it, which is what a malicious update (“rug pull”)
looks like. Check what changed, then accept it:
sievant policy pins # pinned tools, and changed ones waiting for review
sievant policy pins accept <server> # serve the changed tools again
<server> is the --name in the wrapped entry. Wrap with --no-pin to
turn pinning off for new entries.
A call is refused
The agent sees a short message; the reason is in sievant ui and the
server log:
Arguments contain a credential (…); call blocked.A key or token was in the arguments. Pass credentials through the server’s environment, not through tool arguments.Argument 'url': value not permitted by policyor the same for a path (the strict profile).sievant uinames the key to edit:arguments.urls.hostsorarguments.paths.underin the profile file. Strict allows paths under the directorysievant initran in and no URL at all until you list hosts.The tool's result looks like a prompt-injection attempt and was withheld.The strict profile withholds results in the detector’s high-confidence tier.sievant uishows the score and signals. If the result was benign, setinjection.action: annotatein the profile to mark such results instead of withholding them.- A rate-limit error: the proxy allows 50 calls a second per server
(bursts of 100) by default, or the profile’s
rate_limit.
sievant ui says nothing has been audited
Nothing has been audited there yet: wrap a server (sievant wrap) or run sievant proxy, use it, then try again. The audit store is created by
the first call through Sievant. Restart your client after wrapping, use
a tool, and try again. A gateway (sievant serve) writes where its
configuration’s audit.local.path says: give that path with --audit.
The sievant ui link does not work
The link signs one browser in once, then the token is spent: open it once,
in the browser you will use. If it was opened already, stop sievant ui
with Ctrl-C and start it again for a new link. The page listens on 127.0.0.1 only, so it must be opened on the
same machine.
sievant scan finds no configurations
scan looks in each supported client’s default location and in the
current directory’s project files. A configuration somewhere else can be
scanned with --config <path> (repeatable; it scans the files given
instead of the discovered ones). scan-and-wrap.md lists the locations.
sievant report shows n/a for activity
The report found no audit store. Give --audit <path>, or for a
gateway, --config <file> so it reads that configuration’s audit path.
Getting help
Open an issue with the command, its output (--json if it has it),
sievant version and sievant doctor. Remove anything private first; Sievant masks secrets
in its own output, but your configuration paths and server names are
yours to share or not. Report security problems privately
(SECURITY.md).
From the Sievant repository: docs/troubleshooting.md at commit 8529db1.