قابلیتها
سرورهای MCP مشترک
این صفحه بهصورت ماشینی از انگلیسی ترجمه شده است. پیشنهاد اصلاح را با کمال میل میپذیریم. ویرایش این صفحه در GitHub
Claude Code سرورهای MCP کاربر را در .claude.json نگه میدارد، همان فایلی که ورود حساب را در خود دارد، بنابراین این فایل را نمیتوان بین حسابها به اشتراک گذاشت. ccam سرورهای مشترک را در یک فایل گروه، mcp.json، نگه میدارد و هنگام اجرا آن را به همه حسابهای گروه میدهد. با ccam mcp یک سرور را یک بار برای همه حسابهایتان اضافه کنید و با ccam mcp import سروری را که داخل یک نشست اضافه کردهاید به حسابهای دیگر منتقل کنید.
نحوه استفاده
ccam mcp add fs -- npx -y @modelcontextprotocol/server-filesystem ~/code # a local (stdio) server
ccam mcp add ctx --url https://mcp.context7.com/mcp --header 'Authorization: Bearer …'
ccam mcp add docs --url https://example.com/sse --transport sse
ccam mcp add db -e PGHOST=localhost -- pg-mcp # with an environment variable
ccam mcp add-json gh '{"type":"http","url":"https://api.githubcopilot.com/mcp/"}'
ccam mcp add tools -g team -- tools-mcp # into the group team
ccam mcp list # every group, and servers only one account has
ccam mcp remove ctx
ccam mcp import work # move work's own servers into its group
ccam mcp import work gh --force # replace the group's different ghهر تغییر از اجرای بعدی هر حساب اعمال میشود؛ نشستهای در حال اجرا سرورهایی را که با آنها شروع شدهاند نگه میدارند:
$ ccam mcp add fs -- npx -y @modelcontextprotocol/server-filesystem ~/code
✓ fs added in group default — applies from the next launch
$ ccam mcp list
group default (work, side)
ctx http https://mcp.context7.com/mcp
fs stdio npx -y @modelcontextprotocol/server-filesystem /home/me/code
only in account work: pgافزودن نامی که گروه از قبل دارد، تعریف آن را جایگزین میکند و بهجای added، updated چاپ میکند. سرورها فقط به حسابی میرسند که MCP را با آن گروه به اشتراک بگذارد (ccam share <name> --mcp on)؛ وقتی هنوز هیچ حسابی MCP را به اشتراک نمیگذارد، add این را اعلام میکند.
گزینهها
| گزینه | کار آن | پیشفرض |
|---|---|---|
-g، --group <group> |
گروه مقصد برای add، add-json و remove |
تنها گروهی که حسابی MCP را از طریق آن به اشتراک میگذارد، وگرنه default |
-- <command> [args…] (add) |
این فرمان را بهعنوان سرور stdio اجرا میکند | |
--url <url> (add) |
نشانی سرور راه دور (http/sse) | |
--transport <stdio|http|sse> (add) |
نوع انتقال سروری که با --url تعریف شده |
http |
--header <'Name: value'> (add) |
سرآیند HTTP، قابل تکرار | هیچ |
-e، --env <KEY=VALUE> (add) |
متغیر محیطی برای سرور stdio، قابل تکرار | هیچ |
--force (import) |
سرور همنام و متفاوت گروه را جایگزین میکند؛ از mcp.json قدیمی پشتیبان گرفته میشود |
خاموش |
--keep-local (import) |
ورودیها را در .claude.json حساب نگه میدارد |
خاموش |
-h، --help |
راهنمای هر فرمان | |
--dry-run (سراسری) |
فقط mcp list آن را میپذیرد؛ add، add-json، remove و import آن را رد میکنند و چیزی را تغییر نمیدهند |
خاموش |
add یا به یک فرمان پس از -- نیاز دارد یا به --url؛ در غیر این صورت با a command to run (after --) or --url is required شکست میخورد. --header برای سرورهای --url و --env برای سرورهای فرمانی است. add-json همان JSON فرمان claude mcp add-json را میپذیرد و تعریف باید شیئی با command یا url باشد. import همیشه از گروهی استفاده میکند که حساب MCP را از طریق آن به اشتراک میگذارد و list همه گروهها را نشان میدهد، بنابراین -g روی آنها اثری ندارد.
چگونه کار میکند
فایلهای درگیر:
~/.local/share/ccam/groups/<group>/mcp.json: سرورهای مشترک،{"mcpServers": {…}}، همان قالبی که--mcp-configمیخواند. این فایل باfsutil.AtomicWriteو حالت0600نوشته میشود، چون ورودیهای سرور اغلب کلیدهای API دارند.~/.local/share/ccam/profiles/<name>/.claude.json: فایل خود Claude Code با سرورهای حساب. ccam فقط مقدارmcpServersآن را با پویشگرprofile.TopLevelValueمیخواند و هرگز کل فایل را در مسیر اجرا تجزیه نمیکند.~/.local/state/ccam/mcp/<name>/: فایلseen، فایلsync-stampو نسخههای پشتیبان.claude.json.
دو راهبرد وجود دارد که با mcp_strategy در ~/.config/ccam/config.toml تعیین میشوند. پیشفرض، راهبرد flag است:
launcher.applyMCPگروه MCP حساب را پیدا میکند.mcp.FlagArgsبا یکstatبررسی میکند کهmcp.jsonگروه وجود دارد، بدون اینکه آن را تجزیه کند.Plan.InsertArgsگزینه--mcp-config=<path>را درست پس ازclaudeو پیش از آرگومانهای خود شما قرار میدهد، بنابراین--mcp-configیا--strict-mcp-configخود شما همچنان روی آن اعمال میشوند.mcp.NewLocalبررسی میکند که آیا.claude.jsonحساب از اجرای قبلی تغییر کرده است و فقط در آن صورت سرورهای آن را تجزیه میکند.syscall.Execccam را با Claude Code جایگزین میکند.
مسیر بهصورت یک آرگومان، --mcp-config=<path>، داده میشود نه دو آرگومان. --mcp-config در Claude Code چند مقدار میپذیرد، بنابراین claude --mcp-config a.json "prompt" پرامپت را بهعنوان فایل پیکربندی دوم میخواند و با MCP config file not found شکست میخورد. شکل تکآرگومانی همانجا تمام میشود و پرامپت یا زیرفرمانی مانند mcp list که پس از آن بیاید کار میکند. Claude Code سرورهای --mcp-config را علاوه بر سرورهای خود حساب بارگذاری میکند؛ در صورت تداخل نام، ورودی .claude.json برنده است. راهبرد flag هرگز در .claude.json نمینویسد.
سروری که داخل یک نشست با claude mcp add اضافه شود فقط در .claude.json همان حساب قرار میگیرد. ccam در آن لحظه نمیتواند آن را ببیند، چون Claude Code جای آن را گرفته است، بنابراین در اجرای بعدی بررسی میکند. فایل seen زمان تغییر .claude.json و نام سرورهایی را که قبلاً گزارش شدهاند نگه میدارد. وقتی زمان متفاوت باشد، ccam نامها را با گروه مقایسه میکند و برای هر سرور جدید یک بار یک راهنمایی چاپ میکند، بدون اینکه منتظر ورودی بماند:
ccam: MCP servers only account work has: pg
To share them with other accounts: ccam mcp import work pgبا mcp_strategy = "sync"، سرورها در claude mcp list و /mcp به شکل سرورهای عادی کاربر دیده میشوند و ccam پیش از اجرا آنها را در .claude.json هر حساب مینویسد:
mcp.Syncزمان تغییرmcp.jsonگروه را باsync-stampمقایسه میکند. اگر تغییری نکرده باشد،.claude.jsonحساب باز نمیشود.- قفل خود Claude Code را میگیرد، یعنی پوشه
.claude.json.lockکنار فایل که باmkdirساخته میشود. تا ۲ ثانیه صبر میکند و قفلی را که بیش از ۱۰ ثانیه از عمرش گذشته باشد کهنه در نظر میگیرد، همان کاری که کتابخانه قفل Claude Code انجام میدهد. .claude.jsonفعلی را درbackups/در پوشه وضعیت ذخیره میکند و ۵ نسخه جدیدتر را نگه میدارد.- همه سرورهای گروه را در
mcpServersقرار میدهد، سرورهایی را که قبلاً نوشته و گروه دیگر ندارد حذف میکند، سرورهای خود حساب را نگه میدارد و فایل را بهصورت اتمی با حالت اصلیاش مینویسد. - مهر زمانی جدید و نامهایی را که مدیریت میکند ثبت میکند و Claude Code بدون
--mcp-configشروع میشود.
وقتی نشستی از حساب در حال اجرا باشد، همگامسازی با پیام ccam: account work is already running, skipping MCP sync انجام نمیشود، چون Claude Code در حین اجرا .claude.json را بازنویسی میکند. همگامسازی ناموفق ccam: MCP sync failed (launching anyway): … را چاپ میکند و با این حال اجرا را ادامه میدهد. راهنمایی درباره سرورهایی که داخل نشست اضافه شدهاند فقط مربوط به راهبرد flag است.
ccam mcp import سرورهای خود یک حساب را به گروه آن منتقل میکند:
ccam سرورهای حساب را با mcp.LocalServers میخواند و هر کدام را با سرور همنام گروه با استفاده از mcp.SameDef مقایسه میکند، که ترتیب کلیدها و فاصلهها را نادیده میگیرد. سروری که گروه ندارد یا با همان تعریف دارد کپی میشود. سرور متفاوت رد میشود، چون تعریف گروه همان چیزی است که همه حسابهای دیگر از آن استفاده میکنند:
Skipped gh: group default already has a different gh (`ccam mcp import work gh --force` replaces it)
✓ Copied to group default: pg
✓ Removed account work's own entries (.claude.json backed up)با --force سرور گروه جایگزین میشود و mcp.json قبلی ابتدا در .ccam-backup/<time>/mcp.json داخل پوشه گروه ذخیره میشود. سپس mcp.RemoveLocal ورودیهای کپیشده را از .claude.json حساب حذف میکند، با همان قفل و پس از گرفتن پشتیبان در پوشه وضعیت. این کار لازم است، چون در صورت تداخل نام، ورودی حساب بر ورودی گروه برنده میشود. --keep-local آنها را باقی میگذارد.
ایمنی و حالتهای خاص
- ورودها. سرورهایی که با OAuth وارد میشوند توکنهای خود را در
.credentials.jsonهر حساب (mcpOAuth) نگه میدارند، نه در فهرست سرورها، بنابراین اشتراک یک سرور ورود آن را به اشتراک نمیگذارد. در هر حساب یک بار با/mcpوارد شوید، یا ورودها را باccam migrateاز~/.claudeکپی کنید. گروه هرگز فایل ورود دریافت نمیکند. - حسابهای در حال اجرا.
importدر گروه کپی میکند، اما ورودیهای خود حسابی را که در حال اجراست باقی میگذارد و این را اعلام میکند؛ پس از پایان نشست آن را دوباره اجرا کنید. همگامسازی از حسابهای در حال اجرا میگذرد. - فایلهای خراب. اگر
.claude.jsonJSON معتبر نباشد، همگامسازی به آن دست نمیزند و خطا را گزارش میکند. اگر قفل در ۲ ثانیه گرفته نشود، ccam پیامcould not lock … (Claude Code is writing the file)را گزارش میکند. - حسابهایی که MCP را به اشتراک نمیگذارند.
importرد میکند و از شما میخواهد ابتداccam share side --mcp onرا اجرا کنید. - نام گروهها.
-gفقط نام گروه میپذیرد؛ این نام به پوشهای زیرgroups/تبدیل میشود، بنابراین نامهایی مانند../xرد میشوند.