Inspiration
When we started using AI coding agents like Claude Code and Cursor, we fell into a rabbit hole. There are over 12,000 MCP servers out there, and we had no idea which ones to use or what context our agents were actually fetching.
But the bigger problem hit us when we worked as a team. One person's agent was using Tailwind v4, another's was on v3. Styles clashed. Context was fragmented. There was no shared memory and no visibility into what anyone's agent had actually seen. We knew we had to fix that.
What it does
Clean is an MCP server that intercepts tool calls from your other MCP server calls from coding agents mid-request. Every response gets captured and stored in a Neo4j graph database, tagged by team, user, MCP, and timestamp. The frontend then visualizes it and programmers can now have clean context provided straight from a history of MCP toolcalls saved in a vector DB.
On top of that, we built a full dashboard using Reagraph in 2D mode where you can visualize your MCPs as nodes. Click on any MCP and see all the context it has fetched. The Context page lets you search, filter, and clean up outdated entries.
We also integrated Mem Machine to power a chatbot that can answer questions about your stored context. Ask it things like "What MCPs have we used on this project?" or "What context do we have about Tailwind?" and it pulls from everything that has been captured.
It works across teams. We tested it on our own project: one person makes a tool call, another opens the dashboard and sees it, or asks the chatbot about it. One fetch, everyone benefits.
How we built it
Clean runs as an MCP server that intercepts other MCP tool calls mid-request. Every response is captured and tagged with team ID, user ID, MCP name, tool name, and timestamp. The normal agent-to-MCP flow stays intact; Clean just sits in the middle and mirrors everything.
All captured context is stored in Neo4j as a graph: Team → User → MCP → Tool Call → Context. This gives us a single source of truth for what context has ever been fetched across the team.
We built a 6-page dashboard in Next.js: Home, MCP, Context, Team, Settings, Chat. The Home page uses Reagraph in 2D mode to show a central MCP node with individual MCP nodes around it. Clicking an MCP reveals the context nodes associated with that MCP. The Context page has search, freshness indicators, and bulk cleanup tools. The MCP page lets you add and remove MCPs from our own Clean database, which we built from scratch in Neo4j.
We integrated Mem Machine in the Chat tab so users can ask natural language questions about captured context. The chatbot pulls from the Neo4j store and can answer things like "What has been fetched about authentication?" or "Which MCPs did we use this week?"
Design was Granola-inspired: minimal, modern, teal and blue accent, soft radius, clean typography. Collapsible sidebar, smooth transitions, polished loading and empty states.
Challenges we ran into
Claude Code does not let you simply route MCPs through a proxy. We had to figure out how to actually intercept tool calls in the middle of a request, which required a lot of trial and error since MCP documentation is sparse.
Translating Neo4j graph nodes into something that renders well in the browser was painful. We had to map relationships carefully so the 2D visualization made sense and performed smoothly.
Wiring Mem Machine to the right slice of context from Neo4j took iteration. We needed the chatbot to stay relevant without dumping the entire database into every query.
Smithery was not working, and there is no official API for scraping MCP directories. We ended up building our own MCP catalog from scratch in Neo4j.
MCP servers are bleeding-edge technology. Learning how they work, building one that intercepts other MCPs, wiring up Neo4j, integrating Mem Machine, and shipping a polished 6-page dashboard in two days was intense. As freshmen, we had to learn everything on the fly.
Accomplishments that we're proud of
- Got mid-request interception working so Clean actually captures tool calls as they happen
- Built our own MCP catalog from scratch in Neo4j instead of relying on external directories
- Shipped a polished 6-page dashboard with Reagraph 2D visualization that we would actually want to use
- Integrated Mem Machine into a chatbot that can answer questions about captured context
- Tested cross-team context sharing on our own project and it works: one person fetches, everyone sees it
- Learned Neo4j, Mem Machine, Reagraph, and MCP architecture from scratch as freshmen in two days
What we learned
- MCP tooling is young and documentation is thin. We had to reverse-engineer patterns from examples and just try things until they worked.
- Designing a graph schema in Neo4j that maps cleanly to a product UI takes thought. We spent hours on architecture before coding and it saved us from rewriting everything later.
- Interception is harder than proxying. Claude Code does not want you in the middle, so you have to work around constraints instead of fighting them.
- With AI assistance, nothing is too far-fetched. We built something we did not think was possible at the start of the weekend.
What's next for Clean
Token optimization is first. We want to use cosine similarity to fetch only relevant context per prompt instead of everything, and summarize stored context to reduce token costs. We also want smarter MCP recommendations that suggest which MCPs to install based on project type and what the team is working on. We are already talking to a YC company who wants to be our first customer. Goal is to ship, get paying users, and apply to the next YC batch.
Built With
- claude-code
- cypher-query-language
- date-fns
- eslint
- framer-motion
- gemini-api
- gsap
- lucide
- mcp-(model-context-protocol)
- mem-machine
- neo4j
- next.js-16
- node.js-20+
- prettier
- radix-ui
- react-19
- react-hook-form
- reagraph
- shadcn/ui
- tailwind-css-v4
- tanstack/react-table
- typescript
- vercel
- websocket
- zod
Log in or sign up for Devpost to join the conversation.