Reference

Troubleshooting

Quick answer
Most Prism problems are one of five things: the proxy is not running, a port conflict on 11434, a wrong token, an agent config that was rewritten after setup, or a model that is not in your catalog. Check 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
ResultMeaning
All three answerThe proxy is healthy. The problem is in the client's configuration.
Connection refusedPrism 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 emptyNo 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.

Or move Ollama instead
If other tools depend on Ollama being on 11434, set 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.

SymptomFix
Claude Code authenticates against Anthropic againRestart Prism, then restart Claude Code.
Models missing from an agent's pickerRe-sync from the Agents tab, then restart the agent.
Droid lost its custom modelsRe-sync; Prism rewrites settings.local.json, which Droid does not overwrite.
Codex Desktop shows no Prism modelsRe-sync to regenerate the catalog JSON, then restart Codex.
Auto-sync was turned off at some pointEnable it in the Agents tab so future model changes propagate.
Your backup is safe
Every integration keeps a one-time .prism-backup of the original file. Restoring it and clicking Disable is a complete undo.

401, 403 or unsupported-model errors

MessageCauseFix
Unauthorized / 401The token is not exactly prism.Send Authorization: Bearer prism or x-api-key: prism.
403 on /v1/chat/completionsThe OpenAI-style auth middleware rejected the header.Use the Bearer form for this endpoint.
Model not foundThe 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 requestYour provider key is wrong, expired or out of quota.Check the provider in the Provider tab.
Codex account needs re-authenticationThe 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

CheckDetail
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.

SymptomCauseFix
Stuck on the first startThe bootstrap download is slow or blocked.Check the log; retry with a working connection.
No Python foundNo system Python 3.11+.Prism downloads a pinned standalone interpreter automatically — let the bootstrap finish.
Starts then immediately stopsPort 8888 is taken.Free the port or change the SearXNG server port in its settings.
Search returns nothingThe 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 errorCauseFix
needs_authThe upstream rejected the stored credential.Authorize the server in the MCP tab, or leave auto-connect on.
runtime_missingThe stdio command could not be found.Install Node or uv, or give an absolute path in the command field.
not enabled for this endpointThe agent is not allowed that server.Add the server to that agent's access list.
not namespacedThe agent called a bare tool name.Use the mcp__<server>__<tool> names returned by tools/list.
Repeated restartsThe server crashes on startup.Run its command by hand to see the error; Prism only auto-restarts once per failure.
tools/list is slowOne 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.

SymptomLikely cause
Nothing arrives, then everything at onceA client or corporate proxy is buffering SSE.
Long pause before a tool resultThe tool itself is slow, or a search provider is hitting its timeout.
Request ends earlyUpstream 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.

PlatformLog 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

GoalDo this
Fresh statisticsDelete stats.db, or use Clear All Stats in the Stats tab.
Fresh telemetry identityDelete analytics_id.txt.
Fresh SearXNGDelete the searxng folder.
Complete resetRemove config.json, model_remapping.json, stats.db and analytics_id.txt, then restart.
Disconnect one agentClick Disable in the Agents tab; only Prism-tagged entries are removed.
Back up before a full reset
All of these live in the same config directory, and removing 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.