AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
MCP verified MIT Self-run

DevoChat

mcp-gws8820-devochat · by gws8820

Unified Web AI Chat UI & MCP Client

No reviews yet
0 installs
6 views
0.0% view→install

Install

$ agentstack add mcp-gws8820-devochat

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/mcp-gws8820-devochat)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
17d ago

Declared compatibility

Claude CodeClaude DesktopCursorWindsurf

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of DevoChat? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

DevoChat

English | [한국어](README.ko.md)

Unified AI Chat Platform

DevoChat is a web application that allows you to use various multimodal AI models and tools through a single interface. Check out the live demo.

Screenshots

Main Page

Model Selection

File Upload

Image Upload

Tool Selection

Tool Usage

Code Highlighting

Formula Rendering

URL Processing

Real-time Conversation

Image Generation

Image Editing

Key Features

  • Unified Conversation System
  • Uses MongoDB-based unified schema to freely switch between AI models during conversations without losing context.
  • Provides client layers that normalize data to meet the API requirements of each AI provider.
  • Offers an integrated management environment for various media files including images, PDFs, and documents.
  • Advanced Conversation Feature
  • Provides parameter controls including reasoning intensity, response length, and system prompt modification.
  • Supports markdown, LaTeX formula, and code block rendering.
  • Enables streaming responses and simulates streaming for non-streaming models by sending complete responses in chunks.
  • Supports image generation via Text-to-Image and Image-to-Image models.
  • Supports real-time/low-latency STS (Speech-To-Speech) conversations through RealTime API.
  • Model Switching Architecture
  • Allows immediate addition of various AI models to the system through JSON modification without code changes.
  • Supports toggling of additional features like reasoning, web search, and research for hybrid models.
  • Enables linking separate text-to-image and image-editing models (e.g., bytedance/seedream-v5.0-lite, bytedance/seedream-v5.0-lite/edit) with a "switch" variant to function as a single model.
  • Web-based MCP Client
  • Connects directly to all types of MCP servers (SSE, Local) from web browsers.
  • Provides simple access to local MCP servers from anywhere on the web using the secure-mcp-proxy package.
  • Supports visual monitoring of real-time tool calls and execution processes.

Project Structure

devochat/
├── frontend/                           # React frontend
│   ├── public/                         # Static public assets
│   ├── src/
│   │   ├── components/                 # UI components
│   │   ├── contexts/                   # State management
│   │   ├── pages/                      # Page components
│   │   ├── resources/                  # Static resources
│   │   ├── styles/                     # CSS stylesheets
│   │   ├── utils/                      # Utility functions
│   │   └── App.js                      # Main app component
│   ├── build/                          # Production build output
│   ├── releases/                       # Archived frontend builds
│   ├── package.json
│   └── package-lock.json
│
├── backend/                            # FastAPI backend
│   ├── config/                         # Configuration files
│   │   ├── chat_models.json            # Text AI model settings
│   │   ├── image_models.json           # Image generation AI model settings
│   │   ├── mcp_servers.json            # MCP server settings
│   │   └── realtime_models.json        # Real-time conversation model settings
│   ├── generated/                      # Generated outputs
│   ├── prompts/                        # System prompts
│   ├── routes/                         # API routers
│   │   ├── chat_clients/               # Text AI model clients
│   │   ├── image_clients/              # Image generation AI model clients
│   │   ├── auth.py                     # Authentication/authorization management
│   │   ├── common.py                   # Common utilities
│   │   ├── conversations.py            # Conversation management API
│   │   ├── realtime.py                 # Real-time communication
│   │   └── uploads.py                  # File upload handling
│   ├── uploads/                        # Uploaded files and images
│   ├── logging_util.py                 # Logging utility
│   ├── main.py                         # FastAPI application entry point
│   └── requirements.txt                # Python dependencies
├── mcp-proxy/                          # Local MCP proxy package
│   ├── src/                            # Proxy source package
│   ├── servers.json                    # Local MCP server definitions
│   └── pyproject.toml
└── samples/                            # README screenshots

Tech Stack

Installation and Setup

Frontend

Environment Variables
WDS_SOCKET_PORT=0
REACT_APP_FASTAPI_URL=http://localhost:8000
Package Installation and Start
$ cd frontend
$ npm install
$ npm start
Build and Deploy
$ cd frontend
$ npm run build
$ npx serve -s build

Backend

Python Virtual Environment Setup
$ cd backend
$ python -m venv .venv
$ source .venv/bin/activate  # Windows: .venv\Scripts\activate
$ pip install -r requirements.txt
Environment Variables
MONGODB_URI=mongodb+srv://username:password@cluster.mongodb.net/chat_db
PRODUCTION_URL=https://your-production-domain.com
DEVELOPMENT_URL=http://localhost:3000
AUTH_KEY=your_auth_secret_key

# API Key Configuration
OPENAI_API_KEY=...
ANTHROPIC_API_KEY=...
GEMINI_API_KEY=...
OPENROUTER_API_KEY=...
XAI_API_KEY=...
GROK_API_KEY=...
FLUX_API_KEY=...
WAVESPEED_API_KEY=...
GOOGLE_STT_API_KEY=...
REALTIME_API_KEY=...
Run FastAPI Server
$ uvicorn main:app --host=0.0.0.0 --port=8000 --reload

Usage

chat_models.json Configuration

Define the AI models available in the application and their properties through the chat_models.json file.

{
  "default": "google/gemini-3.5-flash",
  "alias": "google/gemini-3.1-flash-lite",
  "models": [
    {
      "model_name": "google/gemini-3.5-flash",
      "model_alias": "Gemini 3.5 Flash",
      "description": "Default Gemini model",
      "endpoint": "/chat/openrouter",
      "billing": {
        "in_billing": "1.5",
        "out_billing": "9"
      },
      "capabilities": {
        "stream": true,
        "vision": true,
        "reasoning": true,
        "web_search": "toggle",
        "research": false,
        "mcp": true
      },
      "controls": {
        "instructions": true,
        "reason": {
          "levels": ["low", "medium", "high", "xhigh"],
          "default": "medium"
        },
        "verbosity": false
      },
      "admin": false
    },
    {
      "model_name": "gpt-5.5",
      "model_alias": "GPT 5.5",
      "description": "High-performance GPT model",
      "endpoint": "/chat/gpt",
      "billing": {
        "in_billing": "5",
        "out_billing": "30"
      },
      "capabilities": {
        "stream": true,
        "vision": true,
        "reasoning": "toggle",
        "web_search": "toggle",
        "research": false,
        "mcp": true
      },
      "controls": {
        "instructions": true,
        "reason": {
          "levels": ["low", "medium", "high", "xhigh"],
          "default": "medium"
        },
        "verbosity": {
          "levels": ["low", "medium", "high"],
          "default": "medium"
        }
      },
      "admin": true
    },
    {
      "model_name": "mistralai/mistral-large-2512",
      "model_alias": "Mistral Large 3",
      "description": "Default Mistral model",
      "endpoint": "/chat/openrouter",
      "billing": {
        "in_billing": "0.5",
        "out_billing": "1.5"
      },
      "capabilities": {
        "stream": true,
        "vision": true,
        "reasoning": false,
        "web_search": "toggle",
        "research": false,
        "mcp": true
      },
      "controls": {
        "instructions": true,
        "reason": false,
        "verbosity": false
      },
      "admin": false
    }
  ]
}

Parameter Description

| Parameter | Description | |---------|------| | default | Default chat model selected when the app initializes | | alias | Model used to generate conversation aliases/titles | | model_name | The actual identifier of the model used in API calls | | model_alias | User-friendly name displayed in the UI | | description | Brief description of the model for reference when selecting | | endpoint | API path for handling model requests in the backend (e.g., /chat/gpt, /chat/claude, /chat/gemini, /chat/grok, /chat/openrouter) | | billing | Object containing model usage cost information | | billing.in_billing | Billing cost for input tokens (prompts). Unit: USD per million tokens | | billing.out_billing | Billing cost for output tokens (responses). Unit: USD per million tokens | | variants | Defines target models for "switch" capability values. Keys such as reasoning, web_search, and research point to the feature-specific model; base points back to the normal model | | capabilities | Defines the features supported by the model | | capabilities.stream | Whether streaming response is supported. Possible values: true, false | | capabilities.vision | Whether image input is supported. Possible values: true, false | | capabilities.reasoning | Whether reasoning is supported. Possible values: true, false, "toggle", "switch" | | capabilities.web_search | Whether web search is supported. Possible values: true, false, "toggle", "switch" | | capabilities.research | Whether research mode is supported. Possible values: true, false, "toggle", "switch" | | capabilities.mcp | Whether MCP server integration is supported. Possible values: true, false | | controls | Defines user control options supported by the model | | controls.instructions | Whether custom instructions setting is possible. Possible values: true, false | | controls.reason | Defines selectable reasoning intensity levels. Possible values: false or an object | | controls.reason.levels | String array defining the selectable options shown in the UI | | controls.reason.default | Default value applied when the model is selected | | controls.verbosity | Defines selectable response length levels. Possible values: false or an object | | controls.verbosity.levels | String array defining the selectable options shown in the UI | | controls.verbosity.default | Default value applied when the model is selected | | admin | If true, only admin users can access/select this model |

Value Description

true

The feature is always enabled.

false

The feature is not supported.

toggle

Users can turn the feature on or off without changing the selected model.

switch

When a user toggles the feature, the selected model changes to another model defined in the variants object.

image_models.json Configuration

Define the image generation AI models available in the application and their properties through the image_models.json file:

{
  "default": "gemini-2.5-flash-image",
  "alias": "google/gemini-3.1-flash-lite",
  "models": [
    {
      "model_name": "gemini-2.5-flash-image",
      "model_alias": "Nano Banana",
      "description": "Google",
      "endpoint": "/image/google/gemini",
      "billing": {
        "in_billing": "0",
        "out_billing": "0.039"
      },
      "capabilities": { "vision": true, "max_input": 10 },
      "admin": false
    },
    {
      "model_name": "bytedance/seedream-v5.0-lite",
      "model_alias": "Seedream 5.0 Lite",
      "description": "BytePlus",
      "endpoint": "/image/wavespeed",
      "billing": {
        "in_billing": "0",
        "out_billing": "0.04"
      },
      "variants": {
        "vision": "bytedance/seedream-v5.0-lite/edit"
      },
      "capabilities": { "vision": "switch" },
      "admin": false
    },
    {
      "model_name": "bytedance/seedream-v5.0-lite/edit",
      "model_alias": "Seedream 5.0 Lite",
      "description": "BytePlus",
      "endpoint": "/image/wavespeed",
      "billing": {
        "in_billing": "0",
        "out_billing": "0.04"
      },
      "variants": {
        "base": "bytedance/seedream-v5.0-lite"
      },
      "capabilities": { "vision": "switch", "max_input": 10 },
      "admin": false
    }
  ]
}

Image Model Parameter Description

| Parameter | Description | |---------|------| | default | Default image model selected when the image page initializes | | alias | Model used to generate image conversation aliases/titles | | variants | Defines target models for "switch" capability values. vision points to the image-editing model; base points back to the text-to-image model | | capabilities.vision | Whether image input is supported. true: supported, false: not supported, "switch": switch to variant model | | capabilities.max_input | Maximum number of images that can be input simultaneously |

Model Switching System (Variants)

You can define various variants of models through the variants object.

Example
[
  {
    "model_name": "bytedance/seedream-v5.0-lite",
    "variants": {
      "vision": "bytedance/seedream-v5.0-lite/edit"
    },
    "capabilities": {
      "vision": "switch"
    }
  },
  {
    "model_name": "bytedance/seedream-v5.0-lite/edit",
    "variants": {
      "base": "bytedance/seedream-v5.0-lite"
    },
    "capabilities": {
      "vision": "switch"
    }
  }
]

realtime_models.json Configuration

Define the real-time voice models available in the application through the realtime_models.json file.

{
  "default": "gpt-realtime-2:coral",
  "models": [
    {
      "model_name": "gpt-realtime-2:marin",
      "model_alias": "Marin",
      "model_gender": "female",
      "description": "A warm motivator"
    },
    {
      "model_name": "gpt-realtime-2:ash",
      "model_alias": "Ash",
      "model_gender": "male",
      "description": "A steady supporter who believes in you"
    }
  ]
}

Realtime Model Parameter Description

| Parameter | Description | |---------|------| | default | Default real-time voice model selected when the real-time page initializes | | model_name | Actual voice/model identifier used by the real-time API | | model_alias | User-friendly voice name displayed in the UI | | model_gender | UI grouping/style hint for the voice. Current values use female or male | | description | Short voice/personality description displayed in the model picker |

MCP Server Configuration

DevoChat is a web-based MCP (Model Context Protocol) client. You can define external servers to connect to in the mcp_servers.json file.

mcp_servers.json

{
  "server-id": {
    "url": "https://example.com/mcp/endpoint",
    "authorization_token": "your_authorization_token",
    "name": "Server_Display_Name",
    "description": "Short description shown in the server picker",
    "admin": false
  }
}

Recommended MCP Servers

Local MCP Server Integration

To connect local MCP servers, use secure-mcp-proxy:

git clone https://github.com/gws8820/secure-mcp-proxy
cd secure-mcp-proxy
uv run python -m secure_mcp_proxy --named-server-config servers.json --port 3000
``

…

## Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [gws8820](https://github.com/gws8820)
- **Source:** [gws8820/DevoChat](https://github.com/gws8820/DevoChat)
- **License:** MIT
- **Homepage:** https://devochat.com

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.