Claude Code-u genişləndirmək: MCP server-lər və plugin-lər
Claude Code-u genişləndirmək: MCP server-lər və plugin-lər
Claude Code-un built-in tool-ları fayl sistemi, shell və web ilə məhdudlaşır. Amma real iş bundan kənardadır: issue tracker, database, browser, kitabxananın aktual sənədləşməsi, komandanın daxili API-ləri. Model Context Protocol, qısaca MCP, model-in bu dünyaya çıxışı üçün standart interfeysdir. Plugin-lər isə genişlənmələri, yəni MCP server-ləri, command-ları, skill-ləri, subagent-ləri və hook-ları, bir paketdə paylaşmaq üçündür. Bu fəsil ikisini də praktikada göstərir və birinci fəsildəki sualı hər addımda təkrarlayır: bu genişlənmə context-ə nə edir?
MCP: tool-lar üçün standart protokol
MCP client-server protokoludur. Claude Code client-dir; server isə üç şey təqdim edən ayrı proqramdır: tool-lar, yəni model-in çağıra biləcəyi funksiyalar, resource-lar, yəni model-in oxuya biləcəyi data, məsələn fayl və ya database sətirləri, və prompt-lar, yəni hazır şablonlar. Server istənilən dildə yazıla bilər və iki üsulla danışır: lokal process kimi standart giriş-çıxış üzərindən, və ya şəbəkə üzərindən HTTP ilə.
Server qoşmaq bir command-dır:
# Lokal server: npx ilə işə düşən process
claude mcp add playwright -- npx @playwright/mcp@latest
# Uzaq server: HTTP üzərindən
claude mcp add --transport http context7 https://mcp.context7.com/mcp
Qoşulan server-in tool-ları növbəti session-da built-in tool-larla yanaşı görünür və model onları eyni qaydada çağırır. Fərq yalnız permission-dadır: MCP tool-ları default olaraq təsdiq tələb edir və icazə qaydaları mcp__server__tool formatında yazılır.
Scope: server kimin üçündür
Hər server üç scope-dan birində qeyd olunur və bu seçim komandada çox vaxt səhv edilir:
| Scope | Harada saxlanır | Kim görür |
|---|---|---|
local (default) | Sizin istifadəçi konfiqurasiyanızda, bu layihə üçün | Yalnız siz, yalnız bu layihədə |
project | Repository-də .mcp.json | Repository-ni clone edən hər kəs |
user | Sizin istifadəçi konfiqurasiyanızda | Siz, bütün layihələrdə |
Komandanın hamısına lazım olan server-lər, məsələn layihənin database-i və ya daxili sənədləşmə, project scope-da .mcp.json faylında version control-a düşür:
{
"mcpServers": {
"context7": {
"type": "http",
"url": "https://mcp.context7.com/mcp"
},
"db": {
"command": "npx",
"args": ["-y", "@bytebase/dbhub", "--dsn", "${DATABASE_URL}"]
}
}
}
Secret-lər fayla yazılmır; environment dəyişənləri ${VAR} sintaksisi ilə oxunur. Repository-dən gələn .mcp.json ilk dəfə açılanda Claude Code təsdiq soruşur, çünki server qoşmaq kod işlətmək deməkdir.
Resource-lar və prompt-lar
Tool-lardan başqa iki imkan az istifadə olunur, amma faydalıdır. Resource-lar @server:resource sintaksisi ilə prompt-a daxil edilir, fayl istinadı kimi: issue tracker server-i varsa, @jira:PROJ-123 issue-nun məzmununu context-ə gətirir. Server-in prompt-ları isə slash command kimi görünür: /mcp__github__pr_summary formatında. Session-da /mcp command-ı qoşulu server-ləri, vəziyyətlərini və uzaq server-lər üçün OAuth girişini idarə edir.
MCP və context engineering
Birinci fəsildəki eksperimenti xatırlayın: iyirmi trivial tool-un ətraflı təsvirləri minlərlə token yeyirdi. İndi həll tərəfinə baxaq. Eyni tool-ların təsvirini yığcam yazanda, yəni yalnız nə vaxt istifadə olunacağını deyəndə, sabit xərc dəfələrlə azalır. Öz server-inizi yazanda qayda belədir: tool adı funksiyanı deyir, təsvir isə yalnız adın demədiyini: nə vaxt, hansı şərtlə, nəyi qaytarır.
İkinci həll seçici yükləmədir. Hər server hər session-da lazım deyil. Browser test server-i yalnız UI işində, axtarış server-i yalnız araşdırmada lazımdır. Konfiqurasiyanı fayla görə seçmək olar:
claude --mcp-config .mcp.search.json
Bu yanaşma ilə .mcp.json gündəlik minimum dəsti, .mcp.search.json canlı axtarışı, .mcp.full.json hər şeyi saxlayır. Session-ın başında /context ilə baxırsınız: MCP tool-ları pəncərənin böyük hissəsini tutursa, konfiqurasiya səhv seçilib.
Üçüncü həll CLAUDE.md-də istiqamətdir. Server qoşulub, amma model onu nə vaxt işlətməyi bilmir: "LangGraph haqqında sualda training data-na yox, context7 server-inə müraciət et" kimi bir sətir modelin köhnəlmiş bilik əvəzinə aktual sənədə getməsini təmin edir. Canlı sənədləşmə server-ləri məhz buna görə dəyərlidir: model-in bilmədiyi və ya səhv bildiyi API-ni lazım olan anda düzgün gətirir, həm də bütün sənədi yox, sorğuya uyğun hissəni.
Böyük tool dəstləri üçün Claude Code tool-ları tənbəl yükləyə bilir: tool-ların yalnız adı qeyd olunur, tam tərif isə model onu axtaranda context-ə düşür. Bu, onlarla server-i qoşulu saxlayıb sabit xərci kiçik saxlamağa imkan verir, amma prinsipi dəyişmir: istifadə olunmayan tool heç bir formada pulsuz deyil.
MCP tool-ları və permission-lar
MCP tool-u built-in tool-dan daha az etibarlıdır: onu kim yazıb, nə edir, hansı data-ya toxunur, Claude Code bilmir. Buna görə MCP tool-ları default olaraq hər çağırışda təsdiq soruşur. İcazə qaydaları server və tool səviyyəsində yazılır:
{
"permissions": {
"allow": ["mcp__context7__*", "mcp__db__query"],
"deny": ["mcp__db__execute"]
}
}
Birinci qayda sənədləşmə server-inin bütün tool-larına icazə verir, çünki onlar yalnız oxuyur. İkinci qayda database server-inin yalnız oxuma tool-una icazə verir, yazma tool-unu isə qadağan edir. Bu bölgü vacibdir: server-in bütövlükdə "etibarlı" və ya "etibarsız" olması yox, hər tool-un nə etdiyi həlledicidir. Server-i qoşanda ilk iş onun tool siyahısına baxıb hansıların yazdığını, hansıların oxuduğunu ayırmaqdır.
Uzaq server-lər üçün ikinci qat kimlik yoxlamasıdır. HTTP üzərindən qoşulan server-lərin çoxu OAuth ilə giriş tələb edir; /mcp command-ı girişi browser-də açır və token-i Claude Code-un öz saxlancında saxlayır, konfiqurasiya faylında yox. Komanda daxilində paylaşılan .mcp.json buna görə yalnız server-in ünvanını daşıyır; hər istifadəçi öz kimliyi ilə daxil olur və server-in icazələri həmin kimliyə görə işləyir.
Üçüncü qat prompt injection-dır və 5-ci fəsildə ətraflı baxacağıq: MCP tool-unun qaytardığı data, məsələn issue mətni və ya web səhifəsi, model-ə göstəriş kimi görünə bilən mətn daşıya bilər. Tool nəticəsi həmişə data-dır, təlimat deyil; amma bunu təmin edən model-in ehtiyatı ilə yanaşı icazə sərhədləridir. Yazan tool-lara icazəni dar saxlamaq injection-ın ziyanını da məhdudlaşdırır.
Öz server-inizi yazmaq
Komandanın daxili sistemləri üçün server yazmaq bir neçə onluq sətirdir. Python-da FastMCP kitabxanası ilə:
from fastmcp import FastMCP
mcp = FastMCP("relnotes")
@mcp.tool()
def latest_release(service: str) -> str:
"""Service-in son release note-unu qaytarır. Yalnız 'nə dəyişib' sualları üçün."""
return store.latest(service)
@mcp.resource("relnotes://{service}/history")
def history(service: str) -> str:
return store.history(service)
@mcp.prompt()
def summarize(service: str) -> str:
return f"{service} üçün son üç release-i istifadəçi dili ilə xülasə et."
if __name__ == "__main__":
mcp.run()
Docstring tool təsviridir və birinci fəslin qaydası ilə yazılıb: nə qaytarır, nə vaxt istifadə olunur. Server claude mcp add relnotes -- python server.py ilə qoşulur. Bir server bir domain-i əhatə etməlidir; "hər şeyi edən" server həm təsvirləri şişirdir, həm də permission qaydalarını qarışdırır.
Claude Code-un özü də MCP server kimi işləyə bilər: claude mcp serve ilə başqa MCP client, məsələn Claude Desktop, Claude Code-un tool-larını istifadə edir. Bu, Claude Code-u başqa agent-in alətinə çevirir.
Plugin-lər: genişlənmələri paketləmək
Bir layihədə yaxşı işləyən command, hook, subagent və MCP konfiqurasiyasını başqa layihəyə köçürmək fayl-fayl kopyalamaq deməkdir. Plugin bunu paketə çevirir:
my-plugin/
├── .claude-plugin/
│ └── plugin.json # ad, versiya, təsvir
├── commands/ # slash command-lar
├── agents/ # subagent-lər
├── skills/ # skill-lər
├── hooks/
│ └── hooks.json # hook konfiqurasiyası
└── .mcp.json # plugin-in gətirdiyi MCP server-lər
Plugin-lər marketplace-lərdən quraşdırılır. Marketplace sadəcə plugin siyahısı olan git repository-sidir; Anthropic-in rəsmi marketplace-i default olaraq mövcuddur, komanda öz marketplace-ini də yarada bilər:
/plugin marketplace add my-org/claude-plugins
/plugin install code-review@my-org
Quraşdırılan plugin-in command-ları, skill-ləri və subagent-ləri sizinkilərlə yanaşı görünür; hook-ları işləyir; MCP server-ləri qoşulur. Komanda üçün bunun mənası standartlaşmadır: review prosesi, commit konvensiyası, deploy yoxlamaları bir plugin-də yaşayır, hər layihədə eyni versiyada quraşdırılır və yenilənəndə hamıda yenilənir. Layihənin settings faylında hansı plugin-lərin aktiv olduğu yazılır, yəni repository clone olunanda plugin dəsti də gəlir.
Plugin-lərin context xərci onların tərkibinin cəmidir: hər command adı, hər skill təsviri, hər MCP tool-u. Çox plugin quraşdırmaq çox server quraşdırmaqla eyni problemi yaradır. Qayda eynidir: istifadə etdiyinizi saxlayın, qalanını söndürün.
MCP, skill, subagent: hansını seçmək
Üçü də "Claude Code-a yeni imkan verir", amma fərqli suallara cavabdır:
| Ehtiyac | Mexanizm |
|---|---|
| Xarici sistemə çıxış: database, API, browser | MCP server |
| Standart iş prosesi: addımlar, skriptlər, şablonlar | Skill (9-cu fəsil) |
| İzolyasiya olunmuş araşdırma və ya ixtisaslaşmış rol | Subagent (7-ci fəsil) |
| Bunların paylaşıla bilən paketi | Plugin |
MCP data və hərəkət gətirir, skill bilik və proses gətirir, subagent context və rol gətirir. Tipik səhv MCP server-i proses üçün yazmaqdır: "release note hazırla" tool-u MCP-də yox, skill-də olmalıdır, çünki o, xarici sistem deyil, iş prosesidir.
Tapşırıqlar
- Layihənizə canlı sənədləşmə server-i qoşun və CLAUDE.md-də istifadə qaydasını yazın. Tanıdığınız kitabxananın yeni API-si haqqında sual verin: model server-ə müraciət etdimi? Etmədisə, CLAUDE.md sətrini necə dəyişmək lazımdır?
- İki MCP konfiqurasiyası hazırlayın: minimum və tam. Hər biri ilə session açıb
/contextilə MCP tool-larının payını ölçün. Fərq nə qədərdir və tam konfiqurasiya hansı real işdə lazımdır? - Komandanızın bir prosesini, məsələn code review qaydalarını, plugin-ə çevirin: bir command, bir subagent, bir hook. Plugin-i ayrı repository-də marketplace kimi dərc edin və başqa layihədə quraşdırın.