Skip to main content
Glama

multicc-sync

Two Claude accounts on one Mac, one session list. Sign out of the Claude desktop app and into another account and every Claude Code session disappears from the sidebar. Nothing was deleted: transcripts live in ~/.claude/projects and are shared, but the app keeps a separate list of sessions per account. mccsync makes both accounts list the same sessions, and keeps them in step afterwards: renames, archives and deletions made in one account carry over to the other.

It never touches transcripts, never reads tokens, and makes no network calls. Every write is preceded by a backup.

Install

uv tool install multicc-sync

Python 3.11 or newer. For the MCP server as well, install multicc-sync[mcp].

Related MCP server: Session Buddy

Use

Quit the Claude app, then:

mccsync

That is the whole update. The first run takes the union of both accounts; later runs carry across whatever changed on either side since the previous run, and say so entry by entry.

mccsync -n                  # show the plan, write nothing
mccsync list                # every account and what it lists
mccsync find "case study"   # locate a session in any account, with its transcript path
mccsync adopt               # list terminal-only sessions in the app (experimental)
mccsync restore             # put back the last backup

mccsync --help lists the rest, including --keep-deleted and --accounts A,B for machines with more than two accounts.

For agents, mccsync-mcp is a stdio MCP server with four tools: find_sessions, list_accounts, sync_sessions and terminal_only_sessions. Register it in Claude Code with claude mcp add multicc-sync -- mccsync-mcp. The repository carries a matching skill in skills/session-sync.

The app's session index is not a documented interface. This tool was written against Claude desktop 1.49585.0 on macOS and checks the directory layout before every run; if the app changes it, mccsync stops rather than guesses. Windows and Linux paths are present but untested.

MIT license.

Available Tools

4 tools
find_sessionsA

Find sessions whose title, previous titles, working directory or id contain query, in any account.

Returns, most recent first, the account, title, cwd, cli session id and the transcript path on disk, so the caller can open the transcript directly even when the session belongs to another account.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full behavioral responsibility. It discloses ordering ('most recent first'), the exact return fields, and the cross-account behavior (transcript path on disk, allowing direct opening). It does not cover limit semantics or auth, but for a read-only search tool this is solid behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise paragraphs front-load the core action and then detail the return value and use case. Every sentence adds distinct information, with no filler or repetition of schema fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers what the tool searches, what it returns, ordering, and the cross-account transcript-opening use case. Minor gaps include limit behavior and exact query matching rules (case sensitivity, substring), but given the simplicity and the schema default, the description is nearly complete for an agent to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It adds strong meaning for the query parameter by specifying the fields it matches (title, previous titles, working directory, id). However, the limit parameter is completely absent from the description, leaving its semantics to inference from the schema's default value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Find') with a clear resource ('sessions') and enumerates the searchable fields (title, previous titles, working directory, id). The phrase 'in any account' sets an unmistakable scope and implicitly distinguishes this from sibling tools like list_accounts or terminal_only_sessions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool by stating it searches across any account and returns transcript paths, which suggests cross-account lookup use cases. However, it does not explicitly state when not to use it or which sibling tool to prefer instead, leaving some inference to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_accountsB

Every account index on this machine with its session count, which one is signed in, and whether the app is running.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of disclosing behavior. It says what data the tool exposes (session count, signed-in account, app running state) but never states whether this is a read-only operation, whether it triggers side effects, if it requires authentication, or if it is a snapshot vs. live state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, compact sentence, and every word contributes meaning. It front-loads the subject (accounts) and enumerates the output fields without fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with no output schema, the description conveys the essential return contents: account list, session count, signed-in account, and app running state. It lacks any mention of output format or ordering, but that is a minor gap for a simple listing tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters and the schema is an empty object, so the baseline is 4. There is nothing for the description to explain about parameters, and it correctly does not invent any.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly says what the tool provides: an index of every account on the machine, with session count, signed-in status, and whether the app is running. It does not use an explicit verb like 'lists', but the resource and output contents are unambiguous and distinct from the session-focused siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus find_sessions, sync_sessions, or terminal_only_sessions. The description only states what it returns, leaving the agent to infer the appropriate context from sibling names and the output fields.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sync_sessionsB

Preview (default) or apply a sync between the two accounts that hold sessions.

accounts names the pair as two uuid prefixes separated by a comma when more than two accounts exist. Applying is refused while the desktop app runs; the plan is returned either way.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountsNo
keep_deletedNo
apply_changesNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It does reveal that preview is the default behavior, that applying is refused while the desktop app runs, and that a plan is returned either way. It does not explain what the plan contains or any side effects of applying (e.g., permanent changes to session data). The description gives a moderate level of transparency but omits important details about the impact of applying changes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, consisting of two sentences that front-load the primary purpose (preview or apply a sync). It efficiently covers the default behavior and the main constraint about the desktop app. There is no wasted text, and the structure is clear. However, it could be slightly more structured by separating the parameter explanation into a list, but it remains effective.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 3 parameters, no output schema, and no annotations, the description should be comprehensive. It explains the purpose, the default mode, and the refusal condition, and gives format for accounts. It does not describe the return value beyond 'the plan is returned', nor does it explain the semantics of keep_deleted or apply_changes. The description is adequate for a basic understanding but leaves out details that an agent might need for correct invocation, especially regarding parameter behavior and expected output.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain all parameters. It only explains the 'accounts' parameter, specifying that it should be two uuid prefixes separated by a comma when more than two accounts exist. It does not explain 'keep_deleted' or 'apply_changes' beyond their names. The name 'apply_changes' is somewhat self-explanatory, but 'keep_deleted' is ambiguous. The description adds value for accounts but fails to cover the other parameters, which is a significant gap given zero schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action (preview or apply a sync) on a specific resource (sessions between two accounts). It clearly distinguishes between preview and apply modes, which is central to the tool's purpose. It does not explicitly differentiate from sibling tools, but the siblings (list_accounts, find_sessions, terminal_only_sessions) have obviously different purposes, so the purpose is clear enough.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives some usage context: it explains when to specify the accounts parameter (when more than two accounts exist) and notes that applying is refused while the desktop app runs. However, it does not explicitly say when to use this tool versus alternatives, nor does it provide any 'when not to use' guidance. The advice about the desktop app is useful but the overall guidance is incomplete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

terminal_only_sessionsC

Transcripts that only the terminal claude created and no account lists; mccsync adopt can add them.

ParametersJSON Schema
NameRequiredDescriptionDefault
min_kbNo

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden for behavioral disclosure. It does not state whether the tool is read-only, what it returns (format, limits), or any side effects. The mention of 'mccsync adopt can add them' is about another tool, not this one's behavior. This is a significant gap for a tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one short sentence with no wasted words, which is concise. However, it is cryptic and front-loads a definition rather than an action, and it does not earn its place by clarifying the parameter or usage context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one optional parameter and no output schema, the description still fails to explain min_kb or provide any usage context. It does not tell the agent when to call it or what to expect, leaving the definition incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain min_kb. It does not. The parameter min_kb (default 1) is completely undocumented in the description, leaving the agent to guess its meaning (likely minimum size in kilobytes, but unstated). No compensation for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies the resource (transcripts/sessions created only by terminal claude, not tied to any account) and implies the tool returns them. It is distinguishable from siblings like find_sessions (which likely searches all sessions) and list_accounts (accounts, not sessions), though it lacks an explicit verb such as 'list' or 'get'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives. It mentions 'mccsync adopt' but that is not a sibling, and no conditions are provided for choosing this over find_sessions or sync_sessions. The agent is left to infer its use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updatesv1.0.1
    • First observedfind_sessions
    • First observedlist_accounts
    • First observedsync_sessions
    • First observedterminal_only_sessions

TDQS

B3.3/5.0

Scored across 4 tools

Disambiguation5/5

Each tool targets a clearly distinct operation: listing account status, searching sessions, syncing between accounts, and listing orphaned terminal-only transcripts. No two tools overlap in purpose, and the descriptions make the boundaries obvious.

Naming Consistency4/5

list_accounts, find_sessions, and sync_sessions consistently follow a verb_noun pattern. terminal_only_sessions is a noun-phrase outlier that describes a category rather than an action, creating a minor but noticeable inconsistency.

Tool Count5/5

Four tools is a compact but reasonable surface for a narrow utility focused on inspecting and syncing existing sessions. Each tool earns its place, and there is no redundancy or bloat.

Completeness3/5

The core workflows of listing accounts, finding sessions, and syncing between accounts are covered. However, terminal_only_sessions surfaces transcripts that must be adopted via an external `mccsync adopt` command, leaving that discovery-to-action path incomplete within the MCP server.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers