Nova MCP Server
Exposes the Nova personal AI agent's tools (web search, notes, long-term memory) over the Model Context Protocol. Allows any MCP-compatible client to use these tools independently of the Telegram agent.
README
Nova Agent
A personal AI agent that lives in Telegram, reasons through multi-step tasks using LangGraph, remembers things about you long-term via ChromaDB, exposes its tools over the Model Context Protocol, and runs proactive background jobs -- so it can text you, not just the other way around.
Why this exists
Most "AI chatbot" projects are a single LLM call wrapped in a UI. This project is different in three specific ways:
- Agentic, not single-turn. The core loop (
agent/graph.py) lets the model decide which tools to call, call them, look at the result, and decide again -- looping until the task is actually done, not just until one response is generated. - Has memory across sessions. Facts the agent learns about you are
embedded and stored in ChromaDB (
memory/store.py), so it can recall them in a conversation days later, not just within one chat. - Runs without being asked.
scheduler/jobs.pyuses APScheduler to run the agent on a timer (e.g. a daily morning briefing), and pushes the result to you -- proactive, not purely reactive. Confirmed working in practice: the agent has sent unprompted reminders based on open notes.
Architecture
Telegram --> LangGraph agent --> [ MCP tool server | ChromaDB memory | APScheduler ] | v Groq (openai/gpt-oss-120b, free tier, reasoning engine)
bot/telegram_bot.py-- receives/sends messages via Telegramagent/graph.py-- the LangGraph state machine (the "brain")tools/tools.py-- tool functions (web search, notes, memory)tools/mcp_server.py-- the same tools, exposed over real MCP so any MCP-compatible client could use them, not just this agentmemory/store.py-- long-term memory backed by ChromaDBscheduler/jobs.py-- autonomous background jobs (APScheduler)main.py-- wires everything together and starts the bot
Setup
-
Install dependencies pip install -r requirements.txt
-
Get a free Groq API key Go to console.groq.com -> API Keys -> Create API Key. No credit card required.
-
Create a Telegram bot Message @BotFather on Telegram, send
/newbot, follow the prompts, and copy the token it gives you. -
Get your Telegram user id Message @userinfobot -- it replies with your numeric id.
-
Configure secrets python main.py Message your bot on Telegram. It should reply.
Trying the MCP server standalone
The tools are also runnable as a standalone MCP server, independent of the Telegram agent:
Design decisions and things I learned building this
- Started on Gemini's free tier, migrated to Groq. Gemini's free tier caps at 20 requests/day per model on a fresh project -- fine for a demo, not for active development. Groq's free tier is dramatically more generous and noticeably faster, at zero cost.
- Switched from Llama 3.3 to
openai/gpt-oss-120b. Llama occasionally emitted malformed tool-call syntax (writing out<function=...>as text instead of a structured tool call), which Groq's API rejected with a 400. OpenAI's open-weight models have more consistent structured tool-calling.agent/graph.pyalso retries automatically on this specific failure mode. - Telegram messages are capped at 4096 characters. Long agent replies
(e.g. detailed search summaries) can exceed this and crash the send call
if unhandled.
bot/telegram_bot.pychunks long replies instead. - The system prompt injects the current date/time on every call, since the LLM has no built-in clock and would otherwise guess or refuse.
Notes
- ChromaDB downloads a small embedding model on first run (a few MB) -- this needs a normal internet connection the first time.
- The scheduler's morning briefing runs at 08:00 server time by default
-- change the
CronTriggerinscheduler/jobs.pyto adjust. - Only the Telegram user id in
.envis allowed to talk to the bot; everyone else's messages are silently ignored.
Possible extensions
- Swap Telegram for WhatsApp or add a second channel
- Add more MCP tools (calendar, email triage, GitHub notifications)
- Add evaluation tests for the agent's tool-selection accuracy
- Deploy on Railway/Fly.io for 24/7 uptime instead of running locally
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
Neon Database
MCP server for interacting with Neon Management API and databases
E2B
Using MCP to run code via e2b.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.