Bring up the stack
Clone the repo and start everything with Docker Compose. This launches
Postgres, Redis, a one-shot The
migrate service that creates the schema, the
ingest API (port 3001), the web dashboard (port 3000), and the
summarizer worker.migrate service runs first and creates the schema automatically — no
manual db:push or db:migrate. An LLM key is optional: ingest and
session replay work without one; a key only powers the LLM summaries and the
Intent Gap Report.The dashboard is now at http://localhost:3000 and
the ingest API at http://localhost:3001.Create a project
Open the dashboard and click Create your first project. You’ll get a
project id and a one-time ingest secret — copy it now, it’s stored only
as a hash and is never shown again. (Each project has its own secret; the SDK
sends it to authenticate. There is no shared server-wide secret.)
Wrap your MCP server
Point the SDK at your ingest API and wrap your server. The SDK injects the
Set the env vars in your instrumented server — Using the high-level
mcpeyeIntent parameter into every tool, captures each call, and ships
batches to the API in the background.track() is the entire public API. Call it after registering your tools,
passing the project id from the previous step:MCPEYE_INGEST_SECRET is the
per-project secret you copied when you created the project:McpServer? Pass it directly — track() unwraps to its
underlying low-level Server.Drive some traffic
Connect an agent (Claude Desktop, your app, anything that speaks MCP) and
let it use your tools the way real users do. Each call now arrives at the
ingest API with the agent’s self-reported intent attached.
Read the Intent Gap Report
The worker sessionizes the calls and runs the LLM summary pass on a
schedule. Open the dashboard, pick your project, and open the latest
Intent Gap Report — the top asks your tools attempted but could not
deliver, ranked, with example sessions to drill into.
Seeing entries under Attempted but failed? That’s the signal. Those
are real user goals your server isn’t satisfying yet.
Next steps
Understand the Intent Gap Report
What it measures, and the one thing it honestly can’t see.
How it works end to end
From injected intent to ingest to report.
Self-hosting reference
Env vars, ports, and the privacy model.
Other SDKs
Python and Ruby servers too.