Sandbox
@keli-wen/mcp_chatbot

MCP chatbot framework for terminal and Streamlit

This project is a Python chatbot host that connects an LLM to MCP servers so the bot can call tools while it chats. It ships with a reusable `mcp_chatbot` package, a sample markdown MCP server, and example apps for single prompts, terminal chat, and Streamlit.

253 starsโ€ข53 forksโ€ขPythonโ€ขUpdated 1y ago
Who it's for

Builders who want a chatbot that can call MCP tools from a terminal or Streamlit app.

What it delivers

You can build a chat app that uses external tools through MCP instead of keeping the model isolated.

What it does

Terminal chatbot examples

Runs interactive chat in regular or streaming mode from `example/chatbot_terminal/`.

Streamlit chatbot example

Launches a web chat UI with live streaming and tool workflow display from `example/chatbot_streamlit/app.py`.

Single prompt runners

Processes one prompt in regular or streaming mode from `example/single_prompt/`.

MCP server integration

Connects the chatbot to local MCP servers through `mcp_servers/servers_config.json`.

Custom LLM support

Works with OpenAI-style APIs and Ollama through the LLM client code in `mcp_chatbot/llm/`.

Workflow tracing

Shows tool-call steps with the `WorkflowTrace` and stream printing utilities in `mcp_chatbot/utils/`.

How to get it

  1. 1Clone the repository
    git clone git@github.com:keli-wen/mcp_chatbot.git
    cd mcp_chatbot
  2. 2Install dependencies
    pip install -r requirements.txt
    # or use uv for faster installation
    uv pip install -r requirements.txt
  3. 3Copy the .env.example file to .env
    cp .env.example .env
  4. 4Edit the .env file to add your Qwen API key (just for demo, you can use any LLM API key,โ€ฆ
    LLM_MODEL_NAME=your_llm_model_name_here
    LLM_BASE_URL=your_llm_base_url_here
    LLM_API_KEY=your_llm_api_key_here
    OLLAMA_MODEL_NAME=your_ollama_model_name_here
    OLLAMA_BASE_URL=your_ollama_base_url_here
    MARKDOWN_FOLDER_PATH=/path/to/your/markdown/folder
    RESULT_FOLDER_PATH=/path/to/your/result/folder
  5. 5You can run the following command to run the unit test
    bash scripts/unittest.sh
  6. 6Regular Mode: Process a single prompt and display the complete response
    python example/single_prompt/single_prompt.py

README

MCPChatbot Example

MCP Chatbot

This project demonstrates how to integrate the Model Context Protocol (MCP) with customized LLM (e.g. Qwen), creating a powerful chatbot that can interact with various tools through MCP servers. The implementation showcases the flexibility of MCP by enabling LLMs to use external tools seamlessly.

[!TIP] For Chinese version, please refer to README_ZH.md.

Overview

Chatbot Streamlit Example

Workflow Tracer Example

  • ๐Ÿšฉ Update (2025-04-11):
    • Added chatbot streamlit example.
  • ๐Ÿšฉ Update (2025-04-10):
    • More complex LLM response parsing, supporting multiple MCP tool calls and multiple chat iterations.
    • Added single prompt examples with both regular and streaming modes.
    • Added interactive terminal chatbot examples.

This project includes:

  • Simple/Complex CLI chatbot interface
  • Integration with some builtin MCP Server like (Markdown processing tools)
  • Support for customized LLM (e.g. Qwen) and Ollama
  • Example scripts for single prompt processing in both regular and streaming modes
  • Interactive terminal chatbot with regular and streaming response modes

Requirements

  • Python 3.10+
  • Dependencies (automatically installed via requirements):
    • python-dotenv
    • mcp[cli]
    • openai
    • colorama

Installation

  1. Clone the repository:

    git clone git@github.com:keli-wen/mcp_chatbot.git
    cd mcp_chatbot
    
  2. Set up a virtual environment (recommended):

    cd folder
    
    # Install uv if you don't have it already
    pip install uv
    
    # Create a virtual environment and install dependencies
    uv venv .venv --python=3.10
    
    # Activate the virtual environment
    # For macOS/Linux
    source .venv/bin/activate
    # For Windows
    .venv\Scripts\activate
    
    # Deactivate the virtual environment
    deactivate
    
  3. Install dependencies:

    pip install -r requirements.txt
    # or use uv for faster installation
    uv pip install -r requirements.txt
    
  4. Configure your environment:

    • Copy the .env.example file to .env:

      cp .env.example .env
      
    • Edit the .env file to add your Qwen API key (just for demo, you can use any LLM API key, remember to set the base_url and api_key in the .env file) and set the paths:

      LLM_MODEL_NAME=your_llm_model_name_here
      LLM_BASE_URL=your_llm_base_url_here
      LLM_API_KEY=your_llm_api_key_here
      OLLAMA_MODEL_NAME=your_ollama_model_name_here
      OLLAMA_BASE_URL=your_ollama_base_url_here
      MARKDOWN_FOLDER_PATH=/path/to/your/markdown/folder
      RESULT_FOLDER_PATH=/path/to/your/result/folder
      

Important Configuration Notes โš ๏ธ

Before running the application, you need to modify the following:

  1. MCP Server Configuration: Edit mcp_servers/servers_config.json to match your local setup:

    {
        "mcpServers": {
            "markdown_processor": {
                "command": "/path/to/your/uv",
                "args": [
                    "--directory",
                    "/path/to/your/project/mcp_servers",
                    "run",
                    "markdown_processor.py"
                ]
            }
        }
    }
    

    Replace /path/to/your/uv with the actual path to your uv executable. You can use which uv to get the path. Replace /path/to/your/project/mcp_servers with the absolute path to the mcp_servers directory in your project. (For Windows users, you can take a look at the example in the Troubleshooting section)

  2. Environment Variables: Make sure to set proper paths in your .env file:

    MARKDOWN_FOLDER_PATH="/path/to/your/markdown/folder"
    RESULT_FOLDER_PATH="/path/to/your/result/folder"
    

    The application will validate these paths and throw an error if they contain placeholder values.

You can run the following command to check your configuration:

bash scripts/check.sh

Usage

Unit Test

You can run the following command to run the unit test:

bash scripts/unittest.sh

Examples

Single Prompt Examples

The project includes two single prompt examples:

  1. Regular Mode: Process a single prompt and display the complete response

    python example/single_prompt/single_prompt.py
    
  2. Streaming Mode: Process a single prompt with real-time streaming output

    python example/single_prompt/single_prompt_stream.py
    

Both examples accept an optional --llm parameter to specify which LLM provider to use:

python example/single_prompt/single_prompt.py --llm=ollama

[!NOTE] For more details, see the Single Prompt Example README.

Terminal Chatbot Examples

The project includes two interactive terminal chatbot examples:

  1. Regular Mode: Interactive terminal chat with complete responses

    python example/chatbot_terminal/chatbot_terminal.py
    
  2. Streaming Mode: Interactive terminal chat with streaming responses

    python example/chatbot_terminal/chatbot_terminal_stream.py
    

Both examples accept an optional --llm parameter to specify which LLM provider to use:

python example/chatbot_terminal/chatbot_terminal.py --llm=ollama

[!NOTE] For more details, see the Terminal Chatbot Example README.

Streamlit Web Chatbot Example

The project includes an interactive web-based chatbot example using Streamlit:

streamlit run example/chatbot_streamlit/app.py

This example features:

  • Interactive chat interface.
  • Real-time streaming responses.
  • Detailed MCP tool workflow visualization.
  • Configurable LLM settings (OpenAI/Ollama) and MCP tool display via the sidebar.

MCP Chatbot Streamlit Demo

[!NOTE] For more details, see the Streamlit Chatbot Example README.

Project Structure

  • mcp_chatbot/: Core library code
    • chat/: Chat session management
    • config/: Configuration handling
    • llm/: LLM client implementation
    • mcp/: MCP client and tool integration
    • utils/: Utility functions (e.g. WorkflowTrace and StreamPrinter)
  • mcp_servers/: Custom MCP servers implementation
    • markdown_processor.py: Server for processing Markdown files
    • servers_config.json: Configuration for MCP servers
  • data-example/: Example Markdown files for testing
  • example/: Example scripts for different use cases
    • single_prompt/: Single prompt processing examples (regular and streaming)
    • chatbot_terminal/: Interactive terminal chatbot examples (regular and streaming)
    • chatbot_streamlit/: Interactive web chatbot example using Streamlit

Extending the Project

You can extend this project by:

  1. Adding new MCP servers in the mcp_servers/ directory
  2. Updating the servers_config.json to include your new servers
  3. Implementing new functionalities in the existing servers
  4. Creating new examples based on the provided templates

Troubleshooting

For Windows users, you can take the following servers_config.json as an example:

{
    "mcpServers": {
        "markdown_processor": {
            "command": "C:\\Users\\13430\\.local\\bin\\uv.exe",
            "args": [
                "--directory",
                "C:\\Users\\13430\\mcp_chatbot\\mcp_servers",
                "run", 
                "markdown_processor.py"
            ]
        }
    }
}
  • Path Issues: Ensure all paths in the configuration files are absolute paths appropriate for your system
  • MCP Server Errors: Make sure the tools are properly installed and configured
  • API Key Errors: Verify your API key is correctly set in the .env file

Files in the repo

Repository payloadโ€ข17 top-level entries
  • .gitai
  • assets
  • data-example
  • example
  • mcp_chatbot
  • mcp_servers
  • scripts
  • test
  • .env.example
  • .gitignore
  • .python-version
  • LICENSE
  • pyproject.toml
  • README_ZH.md
  • README.md
  • requirements.txt
  • uv.lock

Discussion (0)

Ask about usage, or say what you built with it

Sign in to join the discussion.

No comments yet. Be the first to say what this is good for.

More frameworks & sdks

HKUDS/nanobotFrameworks & SDKs

Ultra-lightweight, open-source, self-hosted personal AI agent framework in Python with WebUI, tools, memory, MCP, multi-agent workflows, automation, and chat apps

48k
microsoft/
SkillOpt
microsoft/SkillOptFrameworks & SDKs

SkillOpt is a text-space optimizer that trains reusable natural-language skills for frozen LLM agents through trajectory-driven edits, validation-gated updates, and deployable best_skill.md artifacts.

17k
omnigent-ai/omnigentFrameworks & SDKs

Omnigent is an open-source AI agent framework and meta-harness: orchestrate Claude Code, Codex, Cursor, Pi, and custom agents โ€” swap harnesses without rewriting, enforce policies and sandboxing, and collaborate in real time from any device.

9.8k
kyegomez/
OpenMythos
kyegomez/OpenMythosFrameworks & SDKs

A theoretical reconstruction of the Claude Mythos architecture, built from first principles using the available research literature.

15k
D4Vinci/ScraplingFrameworks & SDKs

๐Ÿ•ท๏ธ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!

80k