Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
b234625
Add MCP support and migrate to respones api
grohith327 Apr 14, 2026
af70b73
Add markdown rendering
grohith327 Apr 14, 2026
ae0716c
Minor tweaks
grohith327 Apr 15, 2026
61c81b2
Add swift markdown package dependency
grohith327 Apr 15, 2026
ff63e14
Prevent reloading of MCP servers on all messages
grohith327 Apr 16, 2026
d89a808
Update rendering of tool calls
grohith327 Apr 16, 2026
abb3e23
Update command mode chat view
grohith327 Apr 16, 2026
7a74931
Add editor to update MCP settings
grohith327 Apr 16, 2026
a34676a
Command mode bug fix
grohith327 Apr 16, 2026
559b3fd
Add markdown support in notch overlay
grohith327 Apr 16, 2026
d86b36f
Update notch notifications for command mode
grohith327 Apr 17, 2026
1fa0fe5
Add notification setup
grohith327 Apr 17, 2026
d688e54
Update command mode prompt
grohith327 Apr 18, 2026
338a841
Fix broken Ollama setup guide link
domdomegg Apr 15, 2026
e218ca8
Pad short audio with trailing silence instead of dropping it
domdomegg Apr 14, 2026
9ea639e
Drop temperature for Anthropic models that deprecate it
domdomegg Apr 17, 2026
1e29f80
Add MCP support and migrate to respones api
grohith327 Apr 14, 2026
bc07c93
Add anthropic API support for tool calling
grohith327 Apr 19, 2026
8a60c11
Fix lint errors
grohith327 Apr 19, 2026
d8de004
Fix build errors due to rebase
grohith327 Apr 19, 2026
f1aef83
Merge branch 'main' into mcp-support
grohith327 Apr 19, 2026
d908aad
Fix lint errors
grohith327 Apr 19, 2026
bf353d4
Update integration tests
grohith327 Apr 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 18 additions & 1 deletion Fluid.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
7CDB0A2F2F3C4D5600FB7CAD /* dictation_fixture.wav in Resources */ = {isa = PBXBuildFile; fileRef = 7CDB0A2B2F3C4D5600FB7CAD /* dictation_fixture.wav */; };
7CDB0A302F3C4D5600FB7CAD /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7CDB0A2C2F3C4D5600FB7CAD /* XCTest.framework */; };
7CE006BD2E80EBE600DDCCD6 /* AppUpdater in Frameworks */ = {isa = PBXBuildFile; productRef = 7CE006BC2E80EBE600DDCCD6 /* AppUpdater */; };
7CF2A0012F7C100100A1B2C3 /* MarkdownUI in Frameworks */ = {isa = PBXBuildFile; productRef = 7CF2A0032F7C100100A1B2C3 /* MarkdownUI */; };
/* End PBXBuildFile section */

/* Begin PBXContainerItemProxy section */
Expand Down Expand Up @@ -51,6 +52,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
7CF2A0012F7C100100A1B2C3 /* MarkdownUI in Frameworks */,
7C3697892ED70F9C005874CE /* DynamicNotchKit in Frameworks */,
7C5AF14B2F15041600DE21B0 /* MediaRemoteAdapter in Frameworks */,
7C3236542EAAD608007E4CB6 /* MCP in Frameworks */,
Expand Down Expand Up @@ -157,6 +159,7 @@
7CE006BC2E80EBE600DDCCD6 /* AppUpdater */,
7C1C72F12EECBD1300E3BF4D /* SwiftWhisper */,
7C5AF14A2F15041600DE21B0 /* MediaRemoteAdapter */,
7CF2A0032F7C100100A1B2C3 /* MarkdownUI */,
);
productName = FluidVoice;
productReference = 7C078D8F2E3B339200FB7CAC /* FluidVoice Debug.app */;
Expand Down Expand Up @@ -214,6 +217,7 @@
7C3697872ED70F9C005874CE /* XCRemoteSwiftPackageReference "DynamicNotchKit" */,
7C1C72F02EECBD1300E3BF4D /* XCRemoteSwiftPackageReference "SwiftWhisper" */,
7C5AF1492F15041600DE21B0 /* XCRemoteSwiftPackageReference "mediaremote-adapter" */,
7CF2A0022F7C100100A1B2C3 /* XCRemoteSwiftPackageReference "swift-markdown-ui" */,
);
preferredProjectObjectVersion = 77;
productRefGroup = 7C078D902E3B339200FB7CAC /* Products */;
Expand Down Expand Up @@ -608,7 +612,7 @@
repositoryURL = "https://github.com/modelcontextprotocol/swift-sdk.git";
requirement = {
kind = upToNextMajorVersion;
minimumVersion = 0.10.2;
minimumVersion = 0.12.0;
};
};
7C3697872ED70F9C005874CE /* XCRemoteSwiftPackageReference "DynamicNotchKit" */ = {
Expand All @@ -635,6 +639,14 @@
minimumVersion = 1.1.1;
};
};
7CF2A0022F7C100100A1B2C3 /* XCRemoteSwiftPackageReference "swift-markdown-ui" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/gonzalezreal/swift-markdown-ui";
requirement = {
kind = upToNextMajorVersion;
minimumVersion = 2.4.1;
};
};
/* End XCRemoteSwiftPackageReference section */

/* Begin XCSwiftPackageProductDependency section */
Expand Down Expand Up @@ -668,6 +680,11 @@
package = 7CE006BB2E80EBE600DDCCD6 /* XCRemoteSwiftPackageReference "AppUpdater" */;
productName = AppUpdater;
};
7CF2A0032F7C100100A1B2C3 /* MarkdownUI */ = {
isa = XCSwiftPackageProductDependency;
package = 7CF2A0022F7C100100A1B2C3 /* XCRemoteSwiftPackageReference "swift-markdown-ui" */;
productName = MarkdownUI;
};
/* End XCSwiftPackageProductDependency section */
};
rootObject = 7C078D872E3B339200FB7CAC /* Project object */;
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

25 changes: 25 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,31 @@ https://github.com/user-attachments/assets/c57ef6d5-f0a1-4a3f-a121-637533442c24
- **Auto-updates** with seamless restart
- **Opt-in beta channel** for early preview builds

## MCP in Command Mode

FluidVoice supports MCP tools in **Command Mode** via OpenAI-compatible tool calling.

- MCP config file: `~/Library/Application Support/FluidVoice/settings.json`
- Edit it in-app from **Command Mode header → MCP menu → Edit settings.json**
- Open it from **Command Mode header → MCP menu → Open settings.json**
- Saving in-app validates JSON and auto-reloads MCP servers
- Config shape is Claude-style: top-level `mcpServers` object
- Enable or disable servers with each server's optional `enabled` field (`true` by default)
- Supported transports in config: `stdio` and `http` (`type` is optional for stdio)

Example config:

```json
{
"mcpServers": {
"altic-mcp": {
"command": "uv",
"args": ["run", "--project", "/FULL/PATH/TO/altic-mcp", "/FULL/PATH/TO/altic-mcp/server.py"]
}
}
}
```

## Supported Models

| Model | Best for | Language support | Download size | Hardware |
Expand Down
9 changes: 6 additions & 3 deletions Sources/Fluid/ContentView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -294,11 +294,11 @@ struct ContentView: View {
DebugLogger.shared.info("✅ Audio subsystems initialized", source: "ContentView")
}

// Set up notch click callback for expanding command conversation
// Set up notch click callback for navigating to in-app Command Mode
NotchOverlayManager.shared.onNotchClicked = {
// When notch is clicked in command mode, show expanded conversation
if !NotchContentState.shared.commandConversationHistory.isEmpty {
NotchOverlayManager.shared.showExpandedCommandOutput()
NotchOverlayManager.shared.hide()
self.menuBarManager.openCommandModeFromUI()
}
}

Expand Down Expand Up @@ -777,6 +777,8 @@ struct ContentView: View {
switch destination {
case .preferences:
self.selectedSidebarItem = .preferences
case .commandMode:
self.selectedSidebarItem = .commandMode
}
}

Expand Down Expand Up @@ -1655,6 +1657,7 @@ struct ContentView: View {
// Thinking tokens are extracted but not displayed (no onThinkingChunk)
let config = LLMClient.Config(
messages: messages,
providerID: currentSelectedProviderID,
model: derivedSelectedModel,
baseURL: derivedBaseURL,
apiKey: apiKey,
Expand Down
Loading
Loading