daodao97/chatmcp
48.4
Weak · 5 August 2026
20.4k
lines of production code
Dart
with JavaScript
4
measurements over time
What this system is
This system is a cross-platform chat and AI assistant application that supports multiple LLM providers and the Model Context Protocol (MCP) for tool integration. It features a unified codebase targeting Linux, Windows, macOS, Android, and Web, with native packaging and build tooling for each platform. The application provides a rich UI for managing chat history, model settings, and MCP server connections, alongside local data synchronization and Markdown rendering capabilities.
How it got here
2024 — Cross-platform expansion and architecture modernization
26 changes.
The project significantly expanded its platform support by adding web, Linux, and Windows builds, while introducing comprehensive native packaging for all major operating systems. Concurrently, the codebase underwent a major architectural shift, implementing a repository pattern for data synchronization, supporting multiple LLM providers, and refactoring the UI and state management for a consistent cross-platform experience.
2025 — MCP client and UI expansion
17 changes.
This period focused on expanding the application's capabilities through the Model Context Protocol (MCP) and enhanced user interface components. Key additions include in-memory and SSE-based MCP clients for local and streaming communication, alongside new layout widgets for chat settings and model selection. The release also introduced rich Markdown rendering, an in-app browser, and network synchronization services, supported by improved build scripts and code formatting hooks.
Features
Add SSE transport support for MCP clients
Introduced a new Server-Sent Events (SSE) transport layer for the MCP client, enabling communication via HTTP-based streaming. The change adds an abstract \McpClient\ interface and a concrete \SSEClient\ implementation that manages connection states, handles ping/pong heartbeats, processes JSON-RPC messages, and supports OAuth 2.0 Bearer token authentication. This allows the application to connect to MCP servers using the SSE protocol, with automatic reconnection and endpoint discovery.
lib/mcp/sse · high confidence
Add in-app browser widget for searching and viewing web content
A new \BrowserView\ widget and its associated \MyInAppBrowser\ implementation have been added to \lib/widgets/browser/browser.dart\. This introduces an in-app browser capable of performing Google searches, extracting search result titles, URLs, and snippets, and loading full page content using a headless WebView. The widget uses the \flutter\_inappwebview\ package and includes JavaScript injection to parse search results and convert HTML to Markdown.
lib/widgets/browser · high confidence
Add in-memory MCP client and server implementations
Introduced new in-memory implementations for the Model Context Protocol (MCP) to support local, non-networked testing and development. This includes an \InMemoryClient\ that routes requests to a \MemoryServer\, which handles JSON-RPC messages for initialize, ping, resources, prompts, and tools. Additionally, a standalone \handleRequest\ function in \server.dart\ provides a mock JSON-RPC response generator for development purposes, enabling rapid iteration without external dependencies.
lib/mcp/inmemory · high confidence
Add in-memory MCP server with math and artifact tools
The \lib/mcp/inmemory\_server\ directory now includes a new in-memory MCP server implementation. This adds a \MemoryServerFactory\ that can instantiate servers for 'math' and 'artifact\_instructions' commands. The math server exposes tools for arithmetic operations (add, subtract, multiply, divide, power, sqrt, cbrt, abs, sin, cos, tan, log, max) and trigonometric calculations. The artifact instructions server provides guidance for creating and managing artifacts like code, documents, HTML, SVG, Mermaid diagrams, and React components. This enables local testing and development of MCP clients without needing an external server.
_lib/mcp/inmemory\server · high confidence
Added Android signing and build diagnostic scripts
Added five new shell scripts in the scripts directory to streamline the Android build process. The create\_keystore.sh script generates a release keystore and environment configuration, while verify\_signing.sh validates the keystore and Gradle configuration. The build\_summary.sh script provides a detailed report of generated APKs, AABs, and split APKs. Additionally, test\_build\_platforms.sh offers a multi-platform build test, and diagnose\_build\_issues.sh helps troubleshoot common build failures.
scripts · high confidence
Added German, Turkish, and Chinese app translations
The app now supports German, Turkish, and Chinese in addition to English and existing languages. Users can switch their preferred language in Settings to see the interface in their native language, including options for theme, provider configuration, and MCP server management.
lib/generated · high confidence
Added Streamable HTTP client for MCP
Users can now connect to MCP servers using the Streamable HTTP transport, which supports session management, automatic reconnection with configurable delays, and OAuth 2.0 Bearer token authentication. This new client implementation allows for more robust and secure communication with compatible servers.
lib/mcp/streamable · high confidence
Added local sandbox preview page
A new local sandbox preview page has been added at assets/sandbox/index.html. This page provides a standalone HTML interface for interacting with the Sandpack preview environment, including embedded styles, an iframe for the preview, and JavaScript logic to register the frame and update code via postMessage.
assets/sandbox · high confidence
Added network synchronization service for data sync
A new NetworkSyncService has been introduced to enable data synchronization between devices. This service implements an HTTP server that exposes endpoints for device information, data export, and data import, allowing one device to act as a server while another syncs or pushes data. The service manages server lifecycle, handles JSON-based data transfer, and provides status callbacks to track sync progress.
lib/services · high confidence
Added turndown.js for HTML to Markdown conversion
The project now includes turndown.js, a library that converts HTML content into Markdown format. This addition enables the application to process and transform HTML structures into a more portable and readable Markdown representation, supporting various elements like headings, blockquotes, lists, and code blocks.
assets/js · high confidence
Added widget-to-image conversion utility
A new Flutter widget, WidgetsToImage, and its associated controller have been introduced to capture a widget as a PNG image. The widget wraps child content in a RepaintBoundary and supports an optional captureAll mode that ensures scrollable content is fully rendered before conversion. The controller provides a capture method that returns the image as a Uint8List.
_lib/widgets/widgets\_to\image · high confidence
Cross-platform release packaging and local development tooling
The project now includes configuration for building and distributing native packages (DEB, RPM, AppImage, APK, MSIX, DMG, and ZIP) via FastForge, enabling users to install the app on Linux, Windows, macOS, and Android. For local development, a Makefile provides build and signing commands, and a pre-commit Git hook enforces Dart code formatting to ensure consistency across the codebase.
(repo-wide) · high confidence
Enforce Dart code formatting via pre-commit hook
A new pre-commit hook has been added to the .githooks directory. This hook automatically runs the Dart formatter on the entire repository before each commit. It locates the Dart binary by checking the PATH, the Flutter SDK, or FVM-managed SDKs, ensuring consistent code style and preventing unformatted code from being committed.
.githooks · medium confidence
Initial support for the Web platform
The application now supports running in a web browser. This includes a new OAuth 2.0 callback handler (\web/oauth\_callback.html\) that processes authentication responses and redirects users back to the app, and a compiled JavaScript bundle (\web/sqflite\_sw.js\) that provides the web-specific implementation of the database layer. Additionally, the web manifest (\web/manifest.json\) has been updated to configure the web app's appearance and behavior.
web · high confidence
Introduce Markit widget for rich Markdown rendering
A new Markit widget has been added to lib/widgets/markdown/markit\_widget.dart, providing a comprehensive Markdown rendering component. It supports a wide range of content types including math (LaTeX), code blocks, links, images, inline code, and function calls. The widget also handles dark mode styling and caches the rendered output for performance. This widget serves as a test/demo page for the Markdown rendering capabilities.
lib/widgets/markdown · high confidence
Introduce file-based logging with automatic log rotation
The application now persists logs to daily files in the app's data directory, with automatic cleanup of logs older than three days. The logger initialization has been moved to the start of the app lifecycle, and the logger module has been refactored to use a platform-aware file logger that does nothing on web platforms. Additionally, the global navigator key is now exported from globals.dart and used in the app's root widget.
lib · high confidence
Introduces a repository pattern with pagination, search, and local/remote data synchronization
Users can now browse chat history with paginated lists, search by title, and experience smoother scrolling with automatic load-more triggers. The application now supports both local (SQLite) and remote (HTTP API) data sources, allowing for network synchronization of chat data. Additionally, the database initialization process has been made thread-safe to prevent race conditions during startup.
lib/dao · high confidence
Major overhaul of the Settings page with new features and UI redesign
The Settings page has been significantly restructured and expanded. A new 'General' section includes theme, language, and avatar display options. A redesigned 'LLM/Provider' section allows managing multiple API keys and models. New features include network synchronization (with a dedicated UI and history), an expandable 'MCP Info' view to inspect server tools, and a reusable 'SettingSwitch' component. The layout has been updated to use a TabBar for navigation and supports mobile screens.
lib/page/setting · high confidence
New layout widgets for app info, chat settings, and model selection
Added new UI components in the layout widgets area: an 'About App' dialog displaying version, links, and license; a chat settings panel for adjusting model parameters (temperature, top P, max tokens, frequency/presence penalty); a conversation settings panel for managing MCP server states and general settings; a model selector with search and grouping; and a top toolbar with a delete confirmation dialog. These widgets provide the frontend interface for application information, model configuration, and chat management.
lib/page/layout/widgets · high confidence
New providers for model selection and server state management
Added ChatModelProvider and ServerStateProvider to manage the currently selected LLM model and the enabled/running status of MCP servers respectively. ChatModelProvider persists the user's model choice via SharedPreferences, while ServerStateProvider tracks server states (enabled, running, starting) and syncs them from the McpServerProvider. These changes refactor how the application manages global state for AI models and server connections.
lib/provider · high confidence
New reusable UI components and refactored widgets
Added new reusable widgets including CacheImage for cached image display and preview, ExpandableWidget for collapsible sections, InkIcon for styled clickable icons, Tabs for tabbed navigation, and UpgradeNotice for automatic version checking. Refactored CollapsibleSection to support an initial expanded state, and removed the legacy markit.dart file.
lib/widgets · high confidence
New reusable UI components for consistent styling and popups
The lib/components directory now includes new shared widgets: a Gap spacer and a CText text component that applies a default 12px font size, theme-aware text color, and ellipsis overflow. A BasePopup widget standardizes popup appearance (border radius, shadows, arrow styling) and a SearchablePopup adds built-in search filtering to popups. These changes provide a consistent look and feel across the application's UI elements.
lib/components · high confidence
New utility modules for toast notifications, OAuth 2.0/PKCE, and platform-specific initialization
The lib/utils directory now includes several new utility modules: a ToastUtils class for displaying colored, level-based notifications (error, warn, info, success, and custom); an OAuthDiscoveryService and WebOAuthHandler implementing RFC 8414/7636 for automatic OAuth 2.0 + PKCE discovery and flow handling on web and non-web platforms; platform-specific initialization logic (init\_io.dart, init\_stub.dart) that starts a localhost sandbox server on non-web platforms; a StorageManager for cross-platform app data directories; and a process utility that loads shell environment variables on macOS/Linux to fix 'process not found' errors. These changes introduce new capabilities for user feedback, secure authentication, and cross-platform environment management.
lib/utils · high confidence
Refactored chat page with new message list, code preview, and image sharing components
The chat page layout was refactored to improve structure and add new capabilities. A new message list component was introduced to handle message grouping, auto-scrolling, and keyboard visibility. A code preview component was added to display code snippets with syntax highlighting and a toolbar for copying or switching between code and preview. Additionally, a new image sharing feature was implemented, allowing users to capture and share chat conversations as images. The input area was also updated to support file and image attachments.
_lib/page/layout/chat\page · high confidence
Support for new LLM providers and local models
The application now supports multiple new LLM providers and local models, including DeepSeek, Ollama, Google Gemini, Azure Foundry, GitHub Copilot, and the local Claude Code CLI. The LLMFactory has been updated to instantiate clients for these providers, and the base client now supports proxy settings for HTTP, HTTPS, and SOCKS4/5 connections. Additionally, the ChatMessage model has been extended to include file attachments, token usage tracking, and message tree navigation (parent/child/brother IDs).
lib/llm · high confidence
Support for new Markdown tags and interactive code blocks
The markdown rendering engine now supports a variety of new HTML-like tags and interactive components. Users will see collapsible 'details' sections, expandable 'think' and 'function' blocks that display status or allow execution, and 'artifact' blocks that trigger code previews. Additionally, code blocks now support live previews for Mermaid diagrams and HTML content, and inline code styling has been updated.
lib/widgets/markdown/widgets · high confidence
Behavioural changes
Added Windows plugin support for in-app web view and sharing
The Windows Flutter build now includes the \flutter\_inappwebview\_windows\ and \share\_plus\ plugins. This enables the application to render web content within the app and access the system share sheet on Windows, matching the capabilities already available on other platforms.
windows/flutter · high confidence
Added macOS plugin registrations for file\_picker, flutter\_inappwebview, mobile\_scanner, network\_info\_plus, package\_info\_plus, and share\_plus
The macOS Flutter build now explicitly registers several new plugins, enabling file picking, in-app web viewing, camera scanning, network information, package info, and content sharing on macOS. These additions ensure that the corresponding native capabilities are available to the Flutter application on the Mac platform.
macos/Flutter · high confidence
Android app configuration and build updates
The Android application's main entry point (MainActivity) has been moved to a new package structure (run.daodao.chatmcp) and updated to extend FlutterActivity. The app's launcher icon has been changed from the default mipmap resource to a new 'launcher\_icon' resource. Additionally, the AndroidManifest.xml has been updated to include INTERNET and CAMERA permissions, and the enableOnBackInvokedCallback attribute has been set to true to support predictive back gestures. The project's Gradle wrapper has been upgraded from version 8.3 to 8.10.2.
android · high confidence
Expanded multilingual support with new German, Turkish, and Chinese translations
The application now supports German (de), Turkish (tr), and Chinese (zh) in addition to English. These new localization files include translations for settings, model configurations, and error messages, enabling users to interact with the app in their preferred language.
lib/l10n · high confidence
Linux build updated and app icon added
The Linux application ID has been changed to 'run.daodao.chatmcp'. The C++ standard for the Linux runner was upgraded from C++14 to C++17. Additionally, the Linux application now sets a custom window icon ('assets/logo\_256.png') by locating the executable's directory and loading the image from the Flutter assets.
linux · high confidence
MCP client initialization now supports SSE, Streamable, and In-Memory transports
The MCP client initialization logic in lib/mcp has been refactored to support multiple transport types. Previously, the system primarily relied on StdioClient, but the diff shows the introduction of SSEClient, StreamableClient, and InMemoryClient. The code now inspects the server configuration's 'type' field to instantiate the appropriate client (SSE, Streamable, or In-Memory), with fallbacks to StdioClient for legacy configurations. This change also includes improved error handling and logging for each transport type, ensuring that failures during initialization or verification are captured and displayed via ToastUtils.
lib/mcp · high confidence
Redesigned sidebar with search and pagination
The sidebar layout has been completely refactored. The previous \ChatHistoryPanel\ was replaced by a new \SidebarPanel\ that includes a search bar with debounced filtering, infinite scroll pagination for chat history, and conditional rendering for mobile (drawer) versus desktop/web (persistent sidebar). The main layout now dynamically hides the sidebar on small screens or when toggled, and integrates a top toolbar component.
lib/page/layout · high confidence
StdioClient implements McpClient interface and increases request timeout
The StdioClient in lib/mcp/stdio now implements the McpClient interface, providing a standardized client contract. Additionally, the timeout for pending requests has been increased from 30 seconds to 60 minutes (3600 seconds) to prevent premature expiration of long-running operations.
lib/mcp/stdio · high confidence
Support for OAuth 2.0 authentication and relaxed JSON-RPC message validation
Users can now configure OAuth 2.0 authentication for MCP servers by providing client credentials, token URLs, and scopes in the server configuration, with automatic token validity and expiry checks. Additionally, the JSON-RPC message model has been updated to make the 'method' field optional, allowing for more flexible message structures that do not strictly require a method field.
lib/mcp/models · high confidence
Updated Windows application metadata
The Windows application's company name and legal copyright have been changed from 'com.example' to 'run.daodao'.
windows/runner · high confidence
Updated macOS app icon and display name
The macOS application's icon has been updated to a new set of image assets, and the application's display name has been set to 'ChatMCP' in the Info.plist configuration.
macos/Runner · high confidence
Updated macOS bundle identifiers and enabled GPU validation
The macOS project's bundle identifier for the RunnerTests target has been changed from 'com.example.chatmcp.RunnerTests' to 'run.daodao.chatmcp.RunnerTests'. Additionally, the Xcode scheme for the Runner has been updated to enable GPU validation mode, which may assist in debugging graphics-related issues during development.
macos/Runner.xcodeproj · medium confidence
iOS app configuration and permissions updates
The app bundle display name has been changed from 'chatmcp' to 'ChatMCP'. New usage descriptions have been added to the iOS Info.plist for photo library access, local network access, and camera access (specifically for scanning QR codes for network synchronization). A new Runner.entitlements file has been added to configure the APNS environment for development.
ios/Runner · medium confidence
iOS build configuration updated to include CocoaPods support
The iOS project has been updated to integrate CocoaPods, a dependency manager for Swift and Objective-C projects. This includes adding the 'Pods' and 'Frameworks' groups to the Xcode project structure, linking the 'Pods\_Runner' and 'Pods\_RunnerTests' frameworks, and adding build phases to check and embed pods. This change enables the project to manage and build dependencies managed by CocoaPods.
ios/Runner.xcodeproj · high confidence
iOS debug configuration updated with LLDB and GPU validation settings
The Xcode scheme for the iOS Runner app has been updated to include a custom LLDB initialization file pointing to the Flutter ephemeral directory, and GPU validation mode has been enabled for the debug configuration. These changes improve the debugging experience and enable GPU validation features during development.
ios/Runner.xcodeproj/xcshareddata · high confidence
Test coverage
Removal of obsolete test files
The test suite has been cleaned up by removing two outdated test files: 'test/llm\_prompt.dart', which contained a test for the system prompt generator, and 'test/widget\_test.dart', which held a default Flutter counter widget test. These files are no longer part of the active test coverage.
test · high confidence
Dependencies
Android build system migrated to Kotlin DSL and updated dependencies
The Android build configuration has been migrated from Groovy (build.gradle) to Kotlin DSL (build.gradle.kts), introducing support for environment-variable-based release signing and enabling code shrinking/proguard for release builds. Additionally, the project's Dart dependencies (pubspec.lock) and iOS/macOS CocoaPods specifications (Podfile.lock) have been updated to their latest versions, including upgrades to build tools, HTTP clients, and UI libraries.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 48 → 48 (+0.0)
- Rubric changed (rubric-2026.08.18 → rubric-2026.08.19) — scores are not directly comparable.
Lenses
- Code Health 92 → 92 (+0.0)
- Architecture 98 → 98 (+0.0)
- Maturity 61 → 61 (+0.0)
- Readiness 47 → 47 (+0.0)
- Security 58 → 58 (+0.0)
- Domain Modelling 100 → 100 (+0.0)
- Accessibility 36 → 36 (+0.0)
Resolved (2)
- Off-boarding risk: anonymized user #1
- The ScrollListener example uses scrollPosition.pixels >= scrollPosition.maxScrollExtent - loadMoreTriggerDistance but the clip ends before confirming whether this is correct for near-bottom detection. (docs/pagination_config.md)
New (1)
- Off-boarding risk: anonymized user #1
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
daodao97/chatmcp was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 5 August 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 707ad3700c0cd4b889f2be1c4c583452dddcd01a — the exact code this score is about.
- Scored under rubric-2026.08.19 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer latest.