From 97c22941a87ac6fff21ddb167dfeeb067cd82b21 Mon Sep 17 00:00:00 2001
From: Bryan Van Deusen
Date: Wed, 27 May 2026 11:22:28 -0400
Subject: [PATCH] feat(ui): configurable MCP server name + scope; start Scribe
rebrand
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Settings → MCP Access now lets you tune the generated snippet:
- Server name input (default: 'scribe', stored per browser in
localStorage). The name appears both in the claude mcp add
command and as the JSON key in claude_desktop_config.json's
mcpServers map.
- Scope dropdown: user / project / local. Drives the --scope
flag in the claude mcp add snippet. Picks 'project' to commit
the server into the current repo's .mcp.json.
User-visible 'Fable' → 'Scribe' in MCP Access tab copy (lead text,
Claude Desktop step). Branding pivot in the rest of the app
(assistant_name placeholder, SMTP defaults, version line, etc.) is
deferred — chat/journal copy is going away in Phase 7 anyway.
Deliberately NOT touched:
- Tool names (fable_*) — protocol-level identifiers; renaming
breaks any Claude session, agent, or automation that referenced
them. Warrants its own phase.
- mcp/server.py: FastMCP('fable', ...) server name — same reason.
- Internal package name fabledassistant — per the project's
naming convention (CLAUDE.md memory), internal stays.
Co-Authored-By: Claude Opus 4.7 (1M context)
---
frontend/src/views/SettingsView.vue | 84 ++++++++++++++++++++++++++---
1 file changed, 76 insertions(+), 8 deletions(-)
diff --git a/frontend/src/views/SettingsView.vue b/frontend/src/views/SettingsView.vue
index 4f009e8..c87fde8 100644
--- a/frontend/src/views/SettingsView.vue
+++ b/frontend/src/views/SettingsView.vue
@@ -116,17 +116,41 @@ const mcpUrlCopied = ref(false);
const mcpClientTab = ref<'claude-code' | 'claude-desktop'>('claude-code');
const copiedSnippetKey = ref(null);
+// Configurable per-browser: the local name Claude uses for this server, and the
+// scope of the `claude mcp add` call. Persisted to localStorage so the user's
+// preferences carry across visits without needing a server-side setting.
+const _MCP_NAME_KEY = 'mcp_server_name';
+const _MCP_SCOPE_KEY = 'mcp_scope';
+const _DEFAULT_MCP_NAME = 'scribe';
+const _isValidScope = (v: unknown): v is 'user' | 'project' | 'local' =>
+ v === 'user' || v === 'project' || v === 'local';
+
+const mcpServerName = ref(
+ localStorage.getItem(_MCP_NAME_KEY) || _DEFAULT_MCP_NAME,
+);
+const _storedScope = localStorage.getItem(_MCP_SCOPE_KEY);
+const mcpScope = ref<'user' | 'project' | 'local'>(
+ _isValidScope(_storedScope) ? _storedScope : 'user',
+);
+
+watch(mcpServerName, (v) => {
+ const clean = (v || '').trim() || _DEFAULT_MCP_NAME;
+ localStorage.setItem(_MCP_NAME_KEY, clean);
+});
+watch(mcpScope, (v) => localStorage.setItem(_MCP_SCOPE_KEY, v));
+
+const effectiveMcpName = computed(() => (mcpServerName.value || '').trim() || _DEFAULT_MCP_NAME);
const effectiveApiKey = computed(() => newKeyValue.value || '');
const claudeCodeCommand = computed(() => {
- return `claude mcp add --transport http --scope user fable \\
+ return `claude mcp add --transport http --scope ${mcpScope.value} ${effectiveMcpName.value} \\
--url ${mcpUrl.value} \\
--header "Authorization: Bearer ${effectiveApiKey.value}"`;
});
const mcpConfigSnippet = computed(() => JSON.stringify({
mcpServers: {
- fable: {
+ [effectiveMcpName.value]: {
url: mcpUrl.value,
headers: {
Authorization: `Bearer ${effectiveApiKey.value}`,
@@ -2480,7 +2504,7 @@ function formatUserDate(iso: string): string {
MCP Access
- Connect Claude (Code or Desktop) to this Fable instance. Claude reads and writes your notes,
+ Connect Claude (Code or Desktop) to this Scribe instance. Claude reads and writes your notes,
tasks, projects, events, and people via the built-in MCP endpoint below.
@@ -2566,6 +2590,35 @@ function formatUserDate(iso: string): string {
token value, or copy the snippet now and paste your own where it says <your-token>.
+
+
+
+
+
+
-
- --scope user makes fable available across all your projects. Use --scope project to write it into the current repo's .mcp.json instead, or --scope local for this machine and repo only.
-
- Verify the connection by running /mcp inside Claude Code — fable should appear as connected.
+ Verify the connection by running /mcp inside Claude Code — {{ effectiveMcpName }} should appear as connected.
@@ -2616,7 +2666,7 @@ function formatUserDate(iso: string): string {
- Restart Claude Desktop. The Fable tools should appear in the available tools list.
+ Restart Claude Desktop. The Scribe tools should appear in the available tools list.