I built a local index of my own work, then plugged it into Claude Code A developer built a local SQLite index called DevRecall that consolidates activity from Git, GitHub, Jira, Linear, Confluence, Slack and Google Calendar into a searchable CLI tool. The developer then added an MCP server adapter, allowing Claude Code to query the index directly from the editor — enabling the coding agent to retrieve real project context like past bug fixes, Jira tickets and PRs without opening multiple tabs. The tool ships with slash commands for recall, session context injection, note capture and meeting brief generation, and becomes more useful over time as the local database grows from daily syncs. I switch between projects a lot, and the most expensive part of starting a session is trying to remember what I was doing. Did I already try X two weeks ago? When did we decide on the Postgres migration approach? Who was on the last Slack thread about that auth bug? My laptop already had the answers, they were just scattered across Git history, the GitHub web UI, Jira, a Slack search box, and one Confluence doc I couldn't find without three guesses. I had been keeping a side project that consolidated all of that into one local SQLite file. It's a small Go binary called DevRecall https://github.com/pavelpilyak/devrecall that pulls activity from Git, GitHub, Jira, Linear, Confluence, Slack and Google Calendar, runs it through FTS5 and on-device embeddings, and gives me a CLI I can ask "when did I touch the JWT refresh code?" without opening five tabs. It worked. The CLI and the desktop app got used regularly, the standup and recall queries pulled real signal. Then I added an MCP server, and the tool stopped being something I invoke and started being something Claude Code invokes for me. MCP is JSON-RPC over stdio. A coding agent Claude Code, Cursor, Codex CLI, Continue, Zed launches your server as a subprocess, sends initialize , then tools/list , then calls your tools as the user works. Stderr is yours, stdout is the protocol. That's basically the whole story for stdio servers. The reason this changed things for me: the moment I stopped thinking of "the agent" as something I drove with devrecall chat in a terminal, and started thinking of it as Claude Code, the existing tool catalogue I had already written for my own chat REPL suddenly belonged in Claude Code too. Same search activities , list activities , get activity , get related activities functions. They did not need to change. They needed a thin adapter that spoke MCP instead of my own chat loop. I added a devrecall mcp subcommand. About 300 lines of Go for the protocol layer, plus a config block in the Claude Code plugin: { "mcpServers": { "devrecall": { "command": "devrecall", "args": "mcp" } } } After restarting Claude Code, the agent could call any of fifteen tools against my local index. The first useful query I tried was something like "what was that auth bug I fixed in February?". It called current time to anchor "February" against today, then semantic search activities with the query, then get activity on the top hit, then get related activities to pull in the linked Jira ticket and PR. The output was a paragraph with three citations, all real, none invented. After that I more or less stopped opening the desktop app for searches. The same data, the same tool catalogue, but invoked from inside the editor as a side effect of whatever I am working on. The plugin ships four slash commands: /devrecall:recall