Skip to content
CAI
Software that uses CAICheck a score

mattt/iMCP

57.5

Adequate · 1 October 2026

8.3k

lines of production code

Swift

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

iMCP is a macOS menu-bar application that exposes local system capabilities—such as calendar, contacts, maps, phone, and shortcuts—as MCP tools for AI clients. It manages service registration, enforces granular user permissions through a connection approval workflow, and handles secure client discovery via Bonjour. The system includes a robust CLI for service interaction and automated release pipelines, running as a single-instance process with automatic updates.

Features

Automated release and documentation asset generation scripts

Added a comprehensive release automation script (Scripts/release.sh) that handles the full macOS distribution lifecycle, including building, archiving, exporting, notarization, and publishing to GitHub with Sparkle appcast integration. Also added a Python script (Scripts/generate-hero.py) to automatically generate light and dark mode hero images for the README from SVG assets.

Scripts · high confidence

Centralized service management and connection approval in ServerController

The new ServerController centralizes the application's service registry and connection handling logic. It introduces a ServiceRegistry that aggregates available services (such as Calendar, Capture, Contacts, Location, Maps, Messages, Phone, Reminders, Shortcuts, and Utilities) and manages their individual enablement states via AppStorage bindings. Additionally, it implements a connection approval workflow using a dedicated window controller, tracking active approval dialogs and pending approvals to manage client access securely.

App/Controllers · high confidence

Introduce new system services and capture extensions

This change adds several new service modules—Capture, Maps, Phone, and Shortcuts—along with a suite of AVFoundation, AppKit, Contacts, CoreGraphics, EventKit, Foundation, MapKit, and ScreenCaptureKit extensions. The new services expose tools for taking photos, searching places, fetching call history, and running macOS shortcuts, while the extensions provide helper enums and parsing logic (such as lenient ISO 8601 date handling and contact label mapping) that support these capabilities and existing calendar functionality.

App/Services · high confidence

New services and installation options added; license changed to MIT

The app now includes Maps, Phone, and Shortcuts services alongside existing capabilities, and can be installed via Homebrew in addition to the direct download link. The project license has been switched from Apache 2.0 to MIT, and the minimum macOS requirement is now 15.3.

(repo-wide) · high confidence

Behavioural changes

8 commits (0 fixes) modifying iMCP.xcodeproj/project.xcworkspace/xcuserdata

A change to existing behaviour in iMCP.xcodeproj/project.xcworkspace/xcuserdata — 8 commits, 2 files.

iMCP.xcodeproj/project.xcworkspace/xcuserdata · medium confidence · unverified

App relaunches as a menu-bar-only app with automatic updates and stricter security

The app now runs exclusively as a menu-bar item (removing the standalone window) and persists the user's preference for showing or hiding the icon even if macOS removes it. It integrates the Sparkle framework for automatic update checking, using a new public key, and enforces a single-instance policy. To support these changes, the app's entitlements have been tightened: network and personal data access (contacts, calendars, location) are removed, and a new debug entitlements file is added for development.

App · high confidence

Disable automatic scheme creation in Xcode workspace

The workspace settings now explicitly disable the automatic creation of Xcode schemes (contexts) when needed. This ensures that schemes are not generated implicitly during development, giving developers more control over their build configurations and preventing unexpected scheme proliferation.

iMCP.xcodeproj/project.xcworkspace/xcshareddata · high confidence

Improved Claude Desktop configuration handling and UI updates

The iMCP integration now provides a more robust setup experience for Claude Desktop. The configuration panel has been renamed to "Set Up iMCP Server" and its messaging clarifies whether it will create or update the config file. Under the hood, the code now preserves existing MCP server configurations when adding iMCP, rather than overwriting them. It also supports the \env\ field for MCP server entries in the config. Additionally, the JSON encoder now sorts keys for consistent output, and the app uses a new bundle identifier key (\me.mattt.iMCP\) for storing the config file bookmark.

App/Integrations · high confidence

Redesigned menu panel and settings with per-tool toggles and connection approval

The app's main interface has been rebuilt from a MacControlCenter-style menu to a custom SwiftUI panel, introducing granular control over individual tools within each service. Users can now manage service and tool availability directly in the Settings \> Services view, where each tool is listed with its own toggle and a read-only indicator. The connection approval workflow has been enhanced to display the specific services a client will access and includes an "Always trust" option to bypass future prompts for known clients. Additionally, the General settings now support Launch at Login and a trusted client list with per-item removal, while the menu bar copy command plays a confirmation sound.

App/Views · high confidence

Stabilizes CLI connection handling and Bonjour discovery

The CLI now uses a dedicated \MCPService\ backed by Swift's \ServiceLifecycle\ to manage the connection loop, preventing fatal crashes when the Bonjour connection drops mid-session. Discovery logic has been refactored into \BonjourDiscovery\ to ensure the browser is always cancelled on exit paths, fixing resource leaks. Additionally, connections are now established over loopback after discovery to avoid selecting Docker bridge addresses, and the service group configuration uses graceful shutdown behavior to handle connection drops without crashing.

CLI · high confidence

Tool model adopts JSONSchema and adds output formatting options

The Tool model now uses JSONSchema for input definitions instead of a generic Value type and includes a new annotations field. Additionally, the internal JSON encoder is configured to sort keys and avoid escaping slashes, ensuring consistent and predictable output formatting for tool results.

App/Models · high confidence

Updated Xcode project settings and test scheme configuration

The iMCP project scheme has been upgraded to Xcode version 2620, and the build configuration for the imcp-server target has been changed to allow running (buildForRunning set to YES). Additionally, a new test scheme (imcp-serverTests) has been added to support running unit tests with the LLDB debugger.

iMCP.xcodeproj/xcshareddata · high confidence

Fixes

Fix crash from multiple resume calls in App/Shared

A new ResumeGate actor has been added to the App/Shared module to prevent crashes caused by calling a checked continuation multiple times. This component ensures that resume logic is executed only once, protecting the application from runtime errors associated with repeated continuation invocations.

App/Shared · high confidence

Test coverage

Added regression tests for CLI stability and Bonjour discovery

Added test coverage in CLITests to verify correct handling of Bonjour service discovery timeouts, ensuring browsers are cancelled to prevent resource leaks, and validating the MCP service loop's decision logic for termination versus reconnection on various error conditions. Additionally, tests confirm that the ServiceGroup configuration correctly handles normal service termination without crashing, addressing a previous fatal error when connections dropped.

CLITests · high confidence

Dependencies

Introduces imcp-serverTests target and updates framework dependencies

The project now includes a new unit-test target (imcp-serverTests) that bundles BonjourDiscovery and MCPServiceLoop tests, linking against ServiceLifecycle and ServiceLifecycleTestKit. The main app and server targets have been updated to include Sparkle, JSONSchema, and Cocoa frameworks, while removing the deprecated MacControlCenterUI dependency.

iMCP.xcodeproj · high confidence

Update Swift package dependencies and resolve file

The resolved dependencies file has been updated to reflect several version bumps and package changes. Key updates include Madrid to 0.5.0, JSONSchema to 1.3.1, Ontology to 0.10.0, and the MCP Swift SDK (swift-sdk) to 0.12.0. Additionally, Sparkle was updated to 2.9.6, and new dependencies such as eventsource (1.1.1), swift-async-algorithms (1.0.3), swift-atomics (1.3.0), swift-collections (1.1.4), and swift-nio (2.99.0) were added. Some older dependencies like maccontrolcenterui, menubarextraaccess, and the previous mcp-swift-sdk location were removed or replaced.

(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 59 → 57 (-1.4)
  • Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.

Lenses

  • Code Health 90 → 76 (-14.1)
  • Architecture 100 → 96 (-4.0)
  • Maturity 55 → 54 (-0.8)
  • Readiness 45 → 47 (+2.2)
  • Security 75 → 75 (+0.0)

Resolved (8)

  • Dependency hygiene PARTLY measured — SwiftPM pinning read, dependency currency NOT established
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no licence statement (README.md)
  • Documentation: no usage examples (README.md)
  • Duplicated block (15 lines × 2) (App/Services/Messages.swift)
  • Duplicated block (20 lines × 2) (App/Services/Messages.swift)
  • Duplicated block (7 lines × 2) (App/Services/Messages.swift)
  • Hotspot: App/Controllers/ServerController.swift (App/Controllers/ServerController.swift)

New (69)

  • CalendarService.tools (cognitive 105) (App/Services/Calendar.swift)
  • CalendarService.tools (cyclomatic 70) (App/Services/Calendar.swift)
  • CaptureService.tools (cognitive 49) (App/Services/Capture.swift)
  • CaptureService.tools (cyclomatic 36) (App/Services/Capture.swift)
  • ClassTooLong: MessageService (App/Services/Messages.swift)
  • ClaudeDesktop.swift.loadConfig (cognitive 20) (App/Integrations/ClaudeDesktop.swift)
  • ClaudeDesktop.swift.updateConfig (cognitive 24) (App/Integrations/ClaudeDesktop.swift)
  • ContactsService.tools (cognitive 17) (App/Services/Contacts.swift)
  • ContactsService.tools (cyclomatic 16) (App/Services/Contacts.swift)
  • Duplicated block (10 lines × 2) (App/Services/Calendar.swift)
  • Duplicated block (11 lines × 2) (App/Services/Maps.swift)
  • Duplicated block (11 lines × 2) (App/Services/Messages.swift)
  • Duplicated block (12–15 lines × 2) (App/Services/Maps.swift)
  • Duplicated block (13 lines × 2) (App/Services/Calendar.swift)
  • Duplicated block (14 lines × 2) (App/Services/Calendar.swift)
  • Duplicated block (14 lines × 2) (App/Services/Location.swift)
  • Duplicated block (15 lines × 3) (App/Services/Maps.swift)
  • Duplicated block (15–16 lines × 2) (App/Integrations/ClaudeDesktop.swift)
  • Duplicated block (16–17 lines × 2) (App/Services/Calendar.swift)
  • Duplicated block (16–17 lines × 2) (App/Services/Reminders.swift)
  • …and 49 more

Changes since last survey

  • 34 commits — 33 feature/other, 1 fixes

By area

  • App/Services — 12 commits
  • iMCP.xcodeproj/project.pbxproj — 8 commits
  • App/Controllers — 7 commits
  • (root) — 3 commits
  • App/App.swift — 3 commits
  • Scripts/release.sh — 1 commit

Notable commits

  • fix: Fix task cancellation and captures for Xcode 27 (#216)
  • change: Accept connections only over loopback (#242)
  • change: Add chatId to messages_fetch to scope a fetch to one conversation (#251)
  • change: Bump version to 1.5.3 (#241)
  • change: Bump version to 1.5.4 (#243)
  • change: Bump version to 1.6.0 (#248)
  • change: Bump version to 1.6.1 (#250)
  • change: Close sockets when client message loops end (#225)
  • change: Connect over loopback after Bonjour discovery (#229)
  • change: Direct place-name queries to maps_search (#224)
  • change: Fetch editable contacts and serialize contact updates (#231)
  • change: Grant the CallHistoryDB folder so phone_calls_fetch can read the write-ahead log (#220)
  • change: Handle one-sided date ranges and date-only end dates consistently (#249)
  • change: Keep iMCP running when its menu bar item is removed (#234)
  • change: Keep the existing grant when the folder picker is dismissed (#221)
  • change: Messages: grant the Messages folder so the write-ahead log is readable (#198)
  • change: Messages: list attachments in messages_fetch and add messages_attachment_read (#244)
  • change: Name the Bonjour service iMCP (#228)
  • change: Open the attachments connection the way Madrid opened chat.db (#246)
  • change: Preserve the menu bar preference when macOS removes the icon (#236)
  • …and 14 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

mattt/iMCP 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 1 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 915d3bc39968b7d9d1feb0f75e1a1d978774aced — the exact code this score is about.
  • Scored under rubric-2026.09.18 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-e569280dd5e2.