MCP-based assistant for busy people who are context switching
This is an AI assistant that runs using MCP.
uv:
uv check hereuv syncpip install -r requirements.txt.This application uses Arcade to facilitate tool use so you don't need to run any local MCP servers or connect to any remotely in the cloud. Please sign up for Arcade and get a free api key here once registered to use this repo.
Set the following enviroment variables in an .env file in the project root:
ANTHROPIC_API_KEY=
ARCADE_API_KEY=
OPENAI_API_KEY=
You only need ONE LLM key. This repo only supports OpenAI and Anthropic models currently.
By default the agent will kick off an OAuth flow with Arcade for any tools that its not authorized to use. This will cause the exectuion to pause until that flow completes. If you want to skip any unauthorized tools without kicking off OAuth so that it doesn't block, set SKIP_CLI_AUTH=true.
This project uses Langfuse for observability and tracing. Its not mandatory but its helpful to see the dozens of LLM calls that occur nicely formatted in a UI. To utilize it, set these environment variables in the .env:
LANGFUSE_SECRET_KEY=
LANGFUSE_PUBLIC_KEY=
LANGFUSE_HOST="https://cloud.langfuse.com"
The MCP Assistant application is heavily customizable. You can do anything email triaging to lead qualification.
The default workflow generates a daily briefing over various tools like email, calendar, whatsapp and Notion that tells you your schedule for the day, gives you background research from the internet about who you're meeting with and tells you what is urgent.
Daily Briefings. Ideally this should be at the root of your Notion workspace.user_context in main in main.py with a description of who you are, how you like to work (like what communication tools you prefer) and any extra information that will make the model's output better. Update the base_system_prompt with any special instructions you want it to take into account.INPUT_ACTION variable in main.py in the main method. Change the step-by-step instructions based on how you want you daily briefing created.DEFAULT_TOOLS array at the top of plan_exec_agent .py to have only these values ["Gmail", "Google Calendar", "Whatsapp", "Exa", "Notion"] so you don't have to set up every MCP serverpython main.py to create a daily briefing one time.Create a file called user_inputs.py in root directory then add the following constant variables that will control how the assistant runs:
INPUT_ACTION - your request for the MCP assistantUSER_CONTEXT - background information on who you are, what your preferences are, how you like to work, etc. Helps the model produce better outputBASE_SYSTEM_PROMPT - any special instructions the model may need to take into account beyond your user preferences. defaults to 'you are a helpful assistant'ENABLED_CLIENTS - an array of strings containing the names of the MCP servers you want the system to have access to. Make sure they are the same names as those used in the mcp_clients/ implementations. This will allow you to omit, for example, outlook, and still have the system run without issueThen run python main.py to see the result
This project supports publishing the state during the agent's main execution loop using Redis.
To run Redis locally, use:
docker run -d --name redis-local -p 6379:6379 redis:latest
Please add the following environment variables to your .env file
REDIS_URL=redis://localhost:6379
REDIS_STREAM_NAME=plan_execution
PUBLISH_TO_REDIS=true
If you need to debug redis, use the following REDIS CLI commands:
First run this to start a terminal in the container docker exec -it redis-local redis-cli
Then
KEYS * # check streams
XLEN plan_execution # check this specific stream
XREVRANGE plan_execution + - COUNT 1 # check the last message
docker exec redis-local redis-cli XTRIM plan_execution MAXLEN 0 # DELETE all messages on the stream - only use for cleanup during testing
You must install MCP servers in order to use this application. You do not need to install them all, the code will run without them all installed but their tools will not be accessible. The instructions for all of them are below:
pip install -r requirements.txtgit clone the following repos and run npm install in all the project roots
gcp-oauth.keys.json, then copy it to the root of both the gmail and gcal projects from abovenpm run auth from the root of google-calendar-mcp to set up OAuth accessgcp-oauth.keys.json file into the root of Gmail MCP Server project OR run mkdir -p ~/.gmail-mcp && mv gcp-oauth.keys.json ~/.gmail-mcp/. Run npm run auth from the root of Gmail-MCP-Server to enable OAuthgolang. If you have already installed go (i.e. with homebrew) and don't want to override it for fear of breaking some system dependcies, download gvm then use it to download the required version. You may need to configure your $PATH to account for different go versions via gvmuv package manager to create a .venv inside the whatsapp-mcp-server directory and install the dependencies. These are different than the dependencies for this project. The host in this project will automatically activate the venv for you when you run this projectmain.go script to sync the latest messages into the sqlite DB.npm start in a terminalnpm run auth-server.outlook-mcp-tokens.json file in your $HOME directory. Do NOT go to http://localhost:3333/auth/callback, it will error
Note you may have to reauthenticate/invite @your-bot-name.env file in the project root:ANTHROPIC_API_KEY=
GCAL_MCP_SERVER_PATH=/path/to/google-calendar-mcp/build/index.js
GMAIL_MCP_SERVER_PATH=/path/to/Gmail-MCP-Server/dist/index.js
OPENAPI_MCP_HEADERS={"Authorization": "Bearer ntn_YOUR_TOKEN_HERE", "Notion-Version": "2022-06-28"}
NOTION_MCP_SERVER_PATH=/path/to/notion-mcp-server/bin/cli.mjs
WHATSAPP_MCP_SERVER_PATH=/path/to/whatsapp-mcp/whatsapp-mcp-server/main.py
WHATSAPP_MCP_SERVER_VENV_PATH=/path/to/whatsapp-mcp/whatsapp-mcp-server/.venv
EXA_API_KEY=
EXA_MCP_SERVER_PATH=/path/to/exa-mcp-server/build/index.js
OUTLOOK_MCP_SERVER_PATH=/path/to/outlook-mcp/index.js
MS_CLIENT_ID=
MS_CLIENT_SECRET=
SLACK_MCP_SERVER_PATH=/path/to/slack-mcp-server/dist/index.js
SLACK_USER_TOKEN=
Note the unusual setup for the Notion Token under OPENAPI_MCP_HEADERS
No configuration available
Related projects feature coming soon
Will recommend related projects based on sub-categories