Skip to content
CAI
Software that uses CAICheck a score

daodao97/chatmcp

48.4

Weak · 5 August 2026

20.4k

lines of production code

Dart

with JavaScript

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

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.