Fəsil 04 · 7 dəq oxu

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, 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:

ScopeHarada saxlanırKim görür
local (default)Sizin istifadəçi konfiqurasiyanızda, bu layihə üçünYalnız siz, yalnız bu layihədə
projectRepository-də .mcp.jsonRepository-ni clone edən hər kəs
userSizin istifadəçi konfiqurasiyanızdaSiz, 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}"]
    }
  }
}

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ə daxil edilir, fayl istinadı kimi: issue tracker server-i varsa, @jira:PROJ-123 issue-nun məzmununu context-ə gətirir. Server-in 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 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ə 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 ilə giriş tələb edir; /mcp command-ı girişi browser-də açır və 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 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 alətinə çevirir.

Plugin-lər: genişlənmələri paketləmək

Bir layihədə yaxşı işləyən command, hook, 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ə 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ı, 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:

EhtiyacMexanizm
Xarici sistemə çıxış: database, API, browserMCP server
Standart iş prosesi: addımlar, skriptlər, şablonlarSkill (9-cu fəsil)
İzolyasiya olunmuş araşdırma və ya ixtisaslaşmış rol (7-ci fəsil)
Bunların paylaşıla bilən paketiPlugin

MCP data və hərəkət gətirir, skill bilik və proses gətirir, context və rol gətirir. Tipik səhv MCP server-i proses üçün yazmaqdır: " note hazırla" tool-u MCP-də yox, skill-də olmalıdır, çünki o, xarici sistem deyil, iş prosesidir.

Tapşırıqlar

  1. 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?
  2. İki MCP konfiqurasiyası hazırlayın: minimum və tam. Hər biri ilə session açıb /context ilə 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?
  3. Komandanızın bir prosesini, məsələn code review qaydalarını, plugin-ə çevirin: bir command, bir , bir hook. Plugin-i ayrı repository-də marketplace kimi dərc edin və başqa layihədə quraşdırın.