Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion .claude/skills/release/references/blog-post.md
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ Browsershot::html($html)->windowSize(2400, 1500)->setScreenshotType('png')
- Second person, present tense. Contractions are fine here.
- Numbers instead of adjectives: "400 MB at idle", "three round trips", never "much faster".
- Backticks on shortcuts, SQL keywords, identifiers, paths and config keys. Bold for menu paths:
`**Settings > Integrations**`.
`**Settings > MCP**`.
- Tables only for tabular things, two per post at most.
- State a limit flatly and without apology. Never call a competitor bad; say what it costs.
- No em dashes, no banned words (`scripts/banned-words.txt` in the TablePro repo), US spelling to
Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Changed

- Settings > Integrations is now Settings > MCP, and TablePro > Integrations… is now MCP Activity….
- Settings > Sync names what stops iCloud Sync, such as full iCloud storage or a signed-out account, with the action that clears it.

### Fixed
Expand Down
2 changes: 1 addition & 1 deletion TablePro/Core/MCP/MCPApprovalPresenter.swift
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ struct MCPApprovalAlertPresenter: MCPApprovalPresenting {
request.connectionName,
request.databaseType
)
let pointer = String(localized: "Change this in Settings > Integrations.")
let pointer = String(localized: "Change this in Settings > MCP.")
return opening + "\n\n" + Self.consequence(of: request.memory) + " " + pointer
}

Expand Down
2 changes: 1 addition & 1 deletion TablePro/Core/MCP/Outside/MCPClientSession.swift
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ internal enum MCPClientError: Error, Equatable, Sendable {
internal var localizedMessage: String {
switch self {
case .notConfigured:
return String(localized: "This server has no credential. Add its token in Settings > Integrations.")
return String(localized: "This server has no credential. Add its token in Settings > MCP.")
case .timedOut:
return String(localized: "The server did not answer in time.")
case .transport(let detail):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public actor MCPStreamableHttpClientTransport {

private static let namedMethods: Set<String> = ["tools/call", "resources/read", "prompts/get"]
private static let unavailableMessage =
"TablePro's MCP server is not reachable. Make sure TablePro is running and the MCP server is enabled in Settings > Integrations."
"TablePro's MCP server is not reachable. Make sure TablePro is running and the MCP server is enabled in Settings > MCP."

private let configuration: MCPStreamableHttpClientConfiguration
private let credentialsProvider: any MCPUpstreamCredentialsProviding
Expand Down
2 changes: 1 addition & 1 deletion TablePro/Core/Menu/AppDelegate+MainMenuActions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ extension AppDelegate: NSMenuItemValidation {
SoftwareUpdater.shared.checkForUpdates()
}

@objc func openIntegrations(_ sender: Any?) {
@objc func openMCPActivity(_ sender: Any?) {
WindowOpener.shared.openIntegrationsActivity()
}

Expand Down
4 changes: 2 additions & 2 deletions TablePro/Core/Menu/AppMenuBuilder.swift
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ enum AppMenuBuilder {
),
MenuItemFactory.separator,
MenuItemFactory.item(
String(localized: "Integrations…"),
action: #selector(AppDelegate.openIntegrations(_:))
String(localized: "MCP Activity…"),
action: #selector(AppDelegate.openMCPActivity(_:))
),
MenuItemFactory.separator,
MenuItemFactory.item(
Expand Down
206 changes: 206 additions & 0 deletions TablePro/Resources/Localizable.xcstrings
Original file line number Diff line number Diff line change
Expand Up @@ -34459,6 +34459,7 @@
}
},
"Change this in Settings > Integrations." : {
"extractionState" : "stale",
"localizations" : {
"fr" : {
"stringUnit" : {
Expand All @@ -34468,6 +34469,46 @@
}
}
},
"Change this in Settings > MCP." : {
"localizations" : {
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Modifiez ce réglage dans Réglages > MCP."
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "설정 > MCP에서 변경할 수 있습니다."
}
},
"tr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Bunu Ayarlar > MCP bölümünden değiştirin."
}
},
"vi" : {
"stringUnit" : {
"state" : "translated",
"value" : "Thay đổi trong Cài đặt > MCP."
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "可在“设置 > MCP”中更改。"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "可在「設定 > MCP」中變更。"
}
}
}
},
"Change Type" : {
"localizations" : {
"fr" : {
Expand Down Expand Up @@ -93142,6 +93183,7 @@
}
},
"Integrations" : {
"extractionState" : "stale",
"localizations" : {
"fr" : {
"stringUnit" : {
Expand Down Expand Up @@ -93182,6 +93224,7 @@
}
},
"Integrations Activity" : {
"extractionState" : "stale",
"localizations" : {
"fr" : {
"stringUnit" : {
Expand Down Expand Up @@ -93263,6 +93306,7 @@
}
},
"Integrations…" : {
"extractionState" : "stale",
"localizations" : {
"fr" : {
"stringUnit" : {
Expand Down Expand Up @@ -105492,6 +105536,86 @@
}
}
},
"MCP Activity" : {
"localizations" : {
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Activité MCP"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "MCP 활동"
}
},
"tr" : {
"stringUnit" : {
"state" : "translated",
"value" : "MCP Etkinliği"
}
},
"vi" : {
"stringUnit" : {
"state" : "translated",
"value" : "Hoạt động MCP"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "MCP 活动"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "MCP 活動"
}
}
}
},
"MCP Activity…" : {
"localizations" : {
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Activité MCP…"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "MCP 활동…"
}
},
"tr" : {
"stringUnit" : {
"state" : "translated",
"value" : "MCP Etkinliği…"
}
},
"vi" : {
"stringUnit" : {
"state" : "translated",
"value" : "Hoạt động MCP…"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "MCP 活动…"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "MCP 活動…"
}
}
}
},
"MCP query execution" : {
"localizations" : {
"fr" : {
Expand Down Expand Up @@ -151485,6 +151609,7 @@
}
},
"Runs the claude command line tool so chat bills against your Claude subscription. Database tools need the MCP server turned on in Settings > Integrations." : {
"extractionState" : "stale",
"localizations" : {
"fr" : {
"stringUnit" : {
Expand Down Expand Up @@ -151524,6 +151649,46 @@
}
}
},
"Runs the claude command line tool so chat bills against your Claude subscription. Database tools need the MCP server turned on in Settings > MCP." : {
"localizations" : {
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Exécute l’outil en ligne de commande claude pour que la discussion soit facturée sur votre abonnement Claude. Les outils de base de données nécessitent d’activer le serveur MCP dans Réglages > MCP."
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "claude 명령줄 도구를 실행하므로 채팅 사용량은 Claude 구독에 청구됩니다. 데이터베이스 도구를 사용하려면 설정 > MCP에서 MCP 서버를 켜야 합니다."
}
},
"tr" : {
"stringUnit" : {
"state" : "translated",
"value" : "claude komut satırı aracını çalıştırır, böylece sohbet Claude aboneliğinizden düşer. Veritabanı araçları için Ayarlar > MCP altında MCP sunucusunun açık olması gerekir."
}
},
"vi" : {
"stringUnit" : {
"state" : "translated",
"value" : "Chạy công cụ dòng lệnh claude nên phần chat sẽ tính vào gói đăng ký Claude của bạn. Các công cụ cơ sở dữ liệu cần bật máy chủ MCP trong Cài đặt > MCP."
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "运行 claude 命令行工具,因此聊天会计入你的 Claude 订阅。数据库工具需要在“设置 > MCP”中开启 MCP 服务器。"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "執行 claude 命令列工具,因此聊天會計入你的 Claude 訂閱。資料庫工具需要在「設定 > MCP」中開啟 MCP 伺服器。"
}
}
}
},
"Runs the Google Cloud SQL Auth Proxy against an instance connection name." : {
"localizations" : {
"fr" : {
Expand Down Expand Up @@ -194424,6 +194589,7 @@
}
},
"This server has no credential. Add its token in Settings > Integrations." : {
"extractionState" : "stale",
"localizations" : {
"fr" : {
"stringUnit" : {
Expand All @@ -194433,6 +194599,46 @@
}
}
},
"This server has no credential. Add its token in Settings > MCP." : {
"localizations" : {
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Ce serveur n’a pas d’identifiant. Ajoutez son jeton dans Réglages > MCP."
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "이 서버에 자격 증명이 없습니다. 설정 > MCP에서 토큰을 추가하세요."
}
},
"tr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Bu sunucunun kimlik bilgisi yok. Token'ını Ayarlar > MCP bölümünden ekleyin."
}
},
"vi" : {
"stringUnit" : {
"state" : "translated",
"value" : "Máy chủ này chưa có thông tin xác thực. Hãy thêm token của nó trong Cài đặt > MCP."
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "此服务器没有凭据。请在“设置 > MCP”中添加其令牌。"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "此伺服器沒有憑證。請在「設定 > MCP」中加入其權杖。"
}
}
}
},
"This server has no databases yet." : {
"localizations" : {
"fr" : {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,6 @@
import AppKit
import SwiftUI

/// Hosts the activity log and connected clients in an AppKit window so the app no longer needs a
/// SwiftUI scene for it. One instance is kept for the app's lifetime, matching the single-window
/// scene it replaces.
@MainActor
internal final class IntegrationsActivityWindowController: NSWindowController {
private static var shared: IntegrationsActivityWindowController?
Expand All @@ -32,7 +29,7 @@ internal final class IntegrationsActivityWindowController: NSWindowController {
detailMinimumThickness: 520
)

let window = NSWindow.titled(String(localized: "Integrations Activity"), contentViewController: split)
let window = NSWindow.titled(String(localized: "MCP Activity"), contentViewController: split)
window.identifier = NSUserInterfaceItemIdentifier(WindowIdentifier.integrationsActivity)
window.styleMask = [.titled, .closable, .miniaturizable, .resizable]
window.contentMinSize = NSSize(width: 720, height: 400)
Expand Down
2 changes: 1 addition & 1 deletion TablePro/Views/Settings/AIProviderDetailSheet.swift
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,7 @@ struct AIProviderDetailSheet: View {
} header: {
Text("Claude Code")
} footer: {
Text("Runs the claude command line tool so chat bills against your Claude subscription. Database tools need the MCP server turned on in Settings > Integrations.")
Text("Runs the claude command line tool so chat bills against your Claude subscription. Database tools need the MCP server turned on in Settings > MCP.")
.font(.caption)
.foregroundStyle(.secondary)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,8 @@

import SwiftUI

/// The MCP servers somebody else runs that a session may call.
///
/// Its own section rather than a line in **Integrations**, because it is the opposite direction:
/// everything above it is what an outside client may ask of TablePro, and this is what TablePro may
/// ask of an outside server. It sits below them for that reason, and it works whether or not the
/// built-in server is switched on.
/// Below the built-in server's sections because it is the opposite direction: what TablePro may ask
/// of an outside server. It works whether or not the built-in server is on.
internal struct MCPOutsideServersSection: View {
@ObservedObject private var store = MCPServerStore.shared

Expand Down
2 changes: 1 addition & 1 deletion TablePro/Views/Settings/Sections/MCPSection.swift
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ struct MCPSection: View {
}

var body: some View {
Section(String(localized: "Integrations")) {
Section {
Toggle(String(localized: "Enable MCP Server"), isOn: $settings.enabled)

if showsStatus {
Expand Down
Loading
Loading