-
Notifications
You must be signed in to change notification settings - Fork 2
Troubleshooting
Fast diagnosis for the things that commonly go wrong.
Probably one of:
-
URL is wrong. Local:
http://localhost:8000/mcp. Remote: the public URL of your Railway deployment. No trailing slash. -
Bearer token missing. Claude Desktop's custom connector config must
include
Authorization: Bearer nk_<key>. -
Key is revoked or expired. Check
GET /workspace/api-keys. - Firewall. If Nakatomi is on a VPC, the MCP client needs egress to your app.
Quick sanity:
curl -s http://localhost:8000/health
curl -s http://localhost:8000/contacts -H "Authorization: Bearer nk_..."Both should return JSON. If they do and MCP still doesn't connect, the issue is on the MCP client side — check its logs.
-
Missing
X-Workspacewhen using a user JWT. API keys don't need it; JWTs do. See Authentication. -
Typo in the header. Must be
Authorization: Bearer <token>— no quoting, noBasic. - Key deleted. A revoked key returns 401 immediately.
The key has a rate_limit_per_minute and you've hit it. Either:
- Raise the limit: revoke the key, mint a new one with a higher
rate_limit_per_minute - Wait:
Retry-Afterheader says how many seconds until the window resets - Disable globally: unset
API_KEY_RATE_LIMIT_PER_MINUTEand any per-key overrides
See Rate-Limiting.
Most common: you upgraded past a migration that requires a non-null column with no default. Check the logs for the specific migration and Alembic revision.
Recovery:
docker compose exec app alembic current
docker compose exec app alembic heads
docker compose exec app alembic downgrade -1
# inspect, fix, retry
docker compose exec app alembic upgrade headCheck:
-
Worker running?
docker compose logs app | grep webhook. Look for "webhook worker started". -
WEBHOOK_WORKER_ENABLEDset to false? Default is true. Only tests should turn it off. -
Target unreachable?
GET /webhooks/<id>/deliveries— look aterrorandresponse_body. -
Target always returning 5xx? Fix the target; Nakatomi will retry
up to
WEBHOOK_MAX_RETRIESthen mark the rowdead.
See Webhooks.
Almost always missing external_id. The bulk upsert + normal create paths
both dedupe by external_id first. Without one, two creates with the
same email do dedupe, but two creates from different sources (one with
email, one without) don't.
Fix: set external_id on every write that traces back to a source
system. See the AgentLab anti-patterns.
Your export doc was produced by a newer Nakatomi than the target. Check
schema_version in the doc:
jq '.schema_version' nakatomi-dump.jsonCurrent supported: 1. If yours is higher, upgrade the target. If lower,
file an issue — we should be back-compatible and didn't realize we broke.
Possible causes:
- No connectors enabled. Check
GET /memory/connectors. - Connector API key is wrong. Check the app logs on startup for "memory connector 'x' failed to initialize".
- Nothing's been written to that connector yet.
store_eventis fired on CRM mutations; on a fresh workspace there's nothing to recall. - The query is too specific. Try broader queries first.
The cookie is path-scoped to /dashboard. If you navigate to a different
path and back, cookie is fine. If you see the prompt every time:
- Cookie is being cleared by a 401 response from the API (wrong key).
- Browser has cookies disabled for the origin.
- You're on HTTPS but the cookie was set on HTTP — mint a new session.
You're on an old schema. Rebuild:
docker compose down -v # wipes Postgres volume
docker compose up -d
docker compose exec app alembic upgrade head
pytestQueuePool limit of size 10 overflow 20 reached. You've got more
concurrent requests than the pool allows. Fix in app/db.py:
engine = create_engine(
settings.DATABASE_URL,
pool_size=20, # up from 10
max_overflow=40, # up from 20
pool_pre_ping=True,
)Or scale horizontally — more app processes, each with their own pool.
Wrong mcp package. You installed the Microsoft one, not the Anthropic
one. Pin:
mcp>=1.2.0
(Already pinned in requirements.txt.)
- Check GitHub Issues — someone may have hit the same thing.
- Include:
- Nakatomi version (
GET /health) - Exact command or API call
- Full error (logs, HTTP response)
- Deployment (Railway / Docker Compose / native)
- Nakatomi version (
- For security issues, see SECURITY.md — don't post them publicly.
Repository · Issues · MIT licensed · maintained by Matt Dula