Troubleshooting
http://127.0.0.1:11434/health first, then the log file, then the specific section below.Last updated Reviewed against Prism v0.3.26
First: three checks that solve most cases
# 1. Is the proxy answering?
curl http://127.0.0.1:11434/health
# {"status":"ok"}
# 2. What version and service is on the port?
curl http://127.0.0.1:11434/
# {"status":"ok","service":"prism","version":"0.3.26"}
# 3. Does Prism see your models?
curl http://127.0.0.1:11434/v1/models| Result | Meaning |
|---|---|
| All three answer | The proxy is healthy. The problem is in the client's configuration. |
| Connection refused | Prism is not running on that port. Start it, or fix PRISM_PORT. |
| A different service answers / | Something else owns the port — most often a local Ollama server. |
| /v1/models is empty | No models are configured. Add one in the Models tab. |
Port 11434 is already in use
Prism defaults to 11434, which is also Ollama's default port. If a local Ollama server is running, move Prism to another port.
# PowerShell $env:PRISM_PORT = "11435" # bash export PRISM_PORT=11435
After changing the port, re-sync your agents from the Agents tab — the base URL written into every agent config is derived from the port, so existing entries would still point at the old one.
OLLAMA_HOST for Ollama and leave Prism on the default.An agent still talks to its own vendor
Claude Code, Droid and a few others watch and rewrite their own config files, which can drop the Prism entries. Prism re-syncs its managed block on every startup.
| Symptom | Fix |
|---|---|
| Claude Code authenticates against Anthropic again | Restart Prism, then restart Claude Code. |
| Models missing from an agent's picker | Re-sync from the Agents tab, then restart the agent. |
| Droid lost its custom models | Re-sync; Prism rewrites settings.local.json, which Droid does not overwrite. |
| Codex Desktop shows no Prism models | Re-sync to regenerate the catalog JSON, then restart Codex. |
| Auto-sync was turned off at some point | Enable it in the Agents tab so future model changes propagate. |
.prism-backup of the original file. Restoring it and clicking Disable is a complete undo.401, 403 or unsupported-model errors
| Message | Cause | Fix |
|---|---|---|
| Unauthorized / 401 | The token is not exactly prism. | Send Authorization: Bearer prism or x-api-key: prism. |
| 403 on /v1/chat/completions | The OpenAI-style auth middleware rejected the header. | Use the Bearer form for this endpoint. |
| Model not found | The requested name is neither in the catalog nor an alias. | Add the model, add an alias, or rely on the default_model fallback. |
| Upstream rejected the request | Your provider key is wrong, expired or out of quota. | Check the provider in the Provider tab. |
| Codex account needs re-authentication | The ChatGPT OAuth token expired. | Reconnect the account in the OAuth tab. |
Because there is no inbound Ollama /api/chatroute, a client that only speaks Ollama's native API will fail with a 404 here. See Ollama Clients.
Requests do not appear in Stats
| Check | Detail |
|---|---|
| Is the request reaching Prism at all? | If /health works but no row appears, the client is calling a different port. |
| Is the client on the wrong endpoint? | Traffic through a client's own cloud feature never touches Prism. |
| Do you want a custom client name? | Send an X-Client-Name header; otherwise the User-Agent decides the label. |
/v1/messages/count_tokens returns an Anthropic-shaped 404 by design, because Prism does not estimate token counts. Some clients log this as a warning — it is not an error that affects the conversation.
SearXNG will not start
The first start bootstraps an isolated Python environment, which needs a one-time download of roughly 80 MB.
| Symptom | Cause | Fix |
|---|---|---|
| Stuck on the first start | The bootstrap download is slow or blocked. | Check the log; retry with a working connection. |
| No Python found | No system Python 3.11+. | Prism downloads a pinned standalone interpreter automatically — let the bootstrap finish. |
| Starts then immediately stops | Port 8888 is taken. | Free the port or change the SearXNG server port in its settings. |
| Search returns nothing | The metasearch engines are rate-limiting or blocked. | Add a cloud provider such as Exa or Tavily and put it first in the fallback chain. |
Deleting the searxngfolder under Prism's config directory resets the instance; Prism re-bootstraps on the next start.
MCP problems
| State or error | Cause | Fix |
|---|---|---|
| needs_auth | The upstream rejected the stored credential. | Authorize the server in the MCP tab, or leave auto-connect on. |
| runtime_missing | The stdio command could not be found. | Install Node or uv, or give an absolute path in the command field. |
| not enabled for this endpoint | The agent is not allowed that server. | Add the server to that agent's access list. |
| not namespaced | The agent called a bare tool name. | Use the mcp__<server>__<tool> names returned by tools/list. |
| Repeated restarts | The server crashes on startup. | Run its command by hand to see the error; Prism only auto-restarts once per failure. |
| tools/list is slow | One server is timing out. | Each server has a 20-second budget; check which one reports an error in /mcp/status. |
# Server health, including per-server state and messages curl http://127.0.0.1:11434/mcp/status -H "Authorization: Bearer prism"
Remote HTTP and SSE servers stay connected; only stdio child processes are reaped after 300 idle seconds and restarted on the next call. An idle state is normal. See MCP Gateway.
Streaming looks stalled
Prism forwards each event as it translates it, so a stall almost always means the upstream is slow or a tool call is waiting. Check the Stats tab for live tokens per second while the request runs — if TPS is moving, the stream is alive.
| Symptom | Likely cause |
|---|---|
| Nothing arrives, then everything at once | A client or corporate proxy is buffering SSE. |
| Long pause before a tool result | The tool itself is slow, or a search provider is hitting its timeout. |
| Request ends early | Upstream stream timeout or a provider-side limit. |
Logs and debug mode
Prism writes to proxy.log in its config directory. With debug_logs enabled, it also captures full request and response bodies per translation, which is what to inspect when a format translation looks wrong.
| Platform | Log file |
|---|---|
| Windows | %APPDATA%\prism\proxy.log |
| macOS | ~/Library/Application Support/prism/proxy.log |
| Linux | $XDG_CONFIG_HOME/prism/logs/proxy.log |
# Watch the proxy log live (macOS and Linux) tail -f "$HOME/Library/Application Support/prism/proxy.log" # macOS tail -f "$HOME/.config/prism/logs/proxy.log" # Linux
Debug logging is a toggle in the Admin UI and a key in config.json. Turn it off afterwards: it records full traffic to disk, including anything sensitive in a prompt.
Resetting Prism
| Goal | Do this |
|---|---|
| Fresh statistics | Delete stats.db, or use Clear All Stats in the Stats tab. |
| Fresh telemetry identity | Delete analytics_id.txt. |
| Fresh SearXNG | Delete the searxng folder. |
| Complete reset | Remove config.json, model_remapping.json, stats.db and analytics_id.txt, then restart. |
| Disconnect one agent | Click Disable in the Agents tab; only Prism-tagged entries are removed. |
config.json also removes your provider keys, OAuth tokens and MCP credentials.Running without the tray
Prism has a headless mode for servers and containers. Run the binary with --serve to start the proxy without the tray or admin window. There are no other command-line flags; ports and behaviour are configured through PRISM_PORT, PRISM_HOST, PRISM_ADMIN_PORT and config.json.
Frequently asked
Why is my agent still talking to its vendor instead of Prism?
The agent's config was rewritten after Prism set it up. Claude Code and Droid both watch their own config files. Restart Prism so it re-syncs its managed block, then restart the agent so it re-reads the file.
Why does Prism fail to start on port 11434?
Another process, usually a local Ollama server, already holds that port. Set PRISM_PORT to a free port, restart Prism, and re-sync your agents so their base URLs are updated.
Why do all my requests return 401 or 403?
The token must be exactly prism. Prism accepts Authorization: Bearer prism or x-api-key: prism, and rejects anything else, including a blank key.