ЁЯПл рдзрдбрд╛ 02 тАФ Architecture: hosts, clients, servers
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 8 рдкреИрдХреА рдзрдбрд╛ 02 ┬╖ рдорд╛рдЧреЗ: lesson-01-why-mcp ┬╖ рдкреБрдвреЗ: lesson-03-primitives
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбрд╛ 01, рдЖрдгрд┐ рддреАрди рднреВрдорд┐рдХрд╛ рд╡ рдирдХреНрдХреА рдХреЛрдг рдХреЛрдгрд╛рд╢реА рдмреЛрд▓рддреЛ тАФ рдХреЛрдгрддреАрд╣реА wire traffic рд╡рд╛рдЪрдгреНрдпрд╛рдкреВрд░реНрд╡реА рд▓рд╛рдЧрдгрд╛рд░рд╛ рдирдХрд╛рд╢рд╛.
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
Socket рд╡реНрдпрд╡рд╕реНрдереЗрддреАрд▓ рддреАрди рднреВрдорд┐рдХрд╛:
- рдЦреЛрд▓реА ЁЯПл (host) тАФ рдорд╛рдгреВрд╕ рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рддреЛ рддреЗ AI application: Claude Desktop, рдПрдЦрд╛рджрд╛ IDE, рддреБрдордЪреЗ custom agent app. рдХреЛрдгрддреА рдЙрдкрдХрд░рдгреЗ рдЬреЛрдбрд╛рдпрдЪреА рддреЗ рдЦреЛрд▓реА рдард░рд╡рддреЗ, рдЖрдгрд┐ model (рд╡рд┐рджреНрдпрд╛рд░реНрдерд┐рдиреА ЁЯза) рддрд┐рдЪреНрдпрд╛ рдмрд╛рдХрд╛рд╡рд░ рдЗрдереЗрдЪ рдмрд╕рддреЗ.
- рднрд┐рдВрддреАрд╡рд░рдЪреЗ socket ЁЯФМ (client) тАФ рдЦреЛрд▓реАрдЪреНрдпрд╛ рдЖрдд, рдЬреЛрдбрд▓реЗрд▓реНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдХрд░рдгрд╛рд╕рд╛рдареА рдПрдХ socket. Socket рд╡рд┐рдЬреЗрдЪреЗ рддрдкрд╢реАрд▓ рд╕рд╛рдВрднрд╛рд│рддреЗ: handshake, message рдЪреА рдЪреМрдХрдЯ, рдЙрддреНрддрд░рд╛рдВрдЪреА рдкреНрд░рд╢реНрдирд╛рдВрд╢реА рдЬреЛрдбрдгреА. рдПрдХрд╛ рдЦреЛрд▓реАрдд рдЕрдиреЗрдХ sockets рдЕрд╕реВ рд╢рдХрддрд╛рдд (files + GitHub + database, рд╕рдЧрд│реЗ рдПрдХрд╛рдЪ рд╡реЗрд│реА).
- рдЙрдкрдХрд░рдг ЁЯФм (server) тАФ рдПрдХрдЪ рдХреНрд╖рдорддрд╛ рдЧреБрдВрдбрд╛рд│рдгрд╛рд░рд╛ рдЫреЛрдЯрд╛ program. рдЖрдкрдг рдХреЛрдгрддреНрдпрд╛ рдЦреЛрд▓реАрдд рдЖрд╣реЛрдд рд╣реЗ рддреНрдпрд╛рд▓рд╛ рдорд╛рд╣реАрдд рдирд╕рддреЗ рдЖрдгрд┐ рддреНрдпрд╛рдЪреА рдкрд░реНрд╡рд╛рд╣реА рдирд╕рддреЗ тАФ рддреЛ рдлрдХреНрдд рдорд╛рдирдХ рдкреНрд░рд╢реНрдирд╛рдВрдЪреА рдЙрддреНрддрд░реЗ рджреЗрддреЛ. рдЖрдкрд▓рд╛ school_server.py рдореНрд╣рдгрдЬреЗ рдиреЗрдордХреНрдпрд╛ рдпрд╛рдЪреНрдпрд╛ ~125 рдУрд│реА.
рд╕реВрдХреНрд╖реНрдо рдкрдг рдорд╣рддреНрддреНрд╡рд╛рдЪрд╛ рднрд╛рдЧ: model рдХрдзреАрдЪ socket рд▓рд╛ рд╣рд╛рдд рд▓рд╛рд╡рдд рдирд╛рд╣реА. рд╡рд┐рджреНрдпрд╛рд░реНрдерд┐рдиреА
рд╢рдмреНрджрд╛рдВрдд рдореНрд╣рдгрддреЗ "рдорд▓рд╛ lookup_grade call рдХрд░рд╛рдпрдЪрд╛ рдЖрд╣реЗ" (рдПрдХ structured tool call тАФ
AI рдХреЛрд░реНрд╕ L11); рддреЗ рдЦрд░реЛрдЦрд░ рдХрд░рд╛рдпрдЪреЗ рдХреА рдирд╛рд╣реА рддреЗ рдЦреЛрд▓реА рдард░рд╡рддреЗ, socket message рд╡рд╛рд╣реВрди рдиреЗрддреЗ,
рдЙрдкрдХрд░рдг рдЙрддреНрддрд░ рджреЗрддреЗ, рдЖрдгрд┐ result рд╡рд┐рджреНрдпрд╛рд░реНрдерд┐рдиреАрдЪреНрдпрд╛ рдмрд╛рдХрд╛рд╡рд░ рдареЗрд╡рд▓рд╛ рдЬрд╛рддреЛ. Model рд╕реБрдЪрд╡рддреЛ;
host рдард░рд╡рддреЛ. рдзрдбрд╛ 05 рдордзреАрд▓ рд╕рдЧрд│реА рд╕реБрд░рдХреНрд╖рд╛ рддреНрдпрд╛рдЪ рдлрдЯреАрдд рд░рд╛рд╣рддреЗ.
рдХреЛрдг рдХрд╛рдп рдард░рд╡рддреЗ тАФ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рдгреНрдпрд╛рдЪрд╛ рддрдХреНрддрд╛:
| рдирд┐рд░реНрдгрдп | рдХреЛрдг рдард░рд╡рддреЗ | рддреЗ рдХреБрдареЗ рдЕрд╕рддреЗ |
|---|---|---|
| рдХреЛрдгрддреА рдЙрдкрдХрд░рдгреЗ рдЬреЛрдбрд▓реА рдЖрд╣реЗрдд | user (host рдЪреНрдпрд╛ settings рдордзреВрди) | host config / allow-list |
| рдмрд╛рдХрд╛рд╡рд░ рдХрд╛рдп рдЬрд╛рддреЗ (resources, history) | host / app | host |
| рдХреЛрдгрддрд╛ tool, рдХреЛрдгрддреНрдпрд╛ arguments рд╕рд╣ call рдХрд░рд╛рдпрдЪрд╛ | model тАФ рд╕реВрдЪрдирд╛ рдореНрд╣рдгреВрди | model output |
| рддреЛ call рдЦрд░реЛрдЦрд░ рдЪрд╛рд▓рддреЛ рдХреА рдирд╛рд╣реА | host (policy, permission prompt) | host тАФ рд╕рддреНрддреЗрдЪрд╛ рдХреНрд╖рдг (L07) |
| рдПрдЦрд╛рджреЗ write рд╣реЛрддреЗ рдХреА рдирд╛рд╣реА | рдорд╛рдгрд╕рд╛рдЪрд╛ click (рдзреЛрд░рдг 3, L05) | host UI |
| tool рдХрд╛рдп рдХрд░рддреЛ рдЖрдгрд┐ рдХрд╛рдп рдкрд░рдд рджреЗрддреЛ | server | server code |
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart LR
subgraph host["ЁЯПл HOST - e.g. your IDE"]
model["ЁЯза the model<br/>proposes tool calls in words"]
c1["ЁЯФМ client #1"]
c2["ЁЯФМ client #2"]
end
s1["ЁЯФм server: filesystem<br/>(local child process)"]
s2["ЁЯФм server: GitHub<br/>(remote, Streamable HTTP)"]
model -->|"1 'I want lookup_grade(тАж)'"| c1
c1 <-->|"2 JSON-RPC"| s1
c2 <-->|"2 JSON-RPC"| s2
s1 -->|"3 result тЖТ the desk"| model
тЭУ рдХрд╛рдп
- Host = application; user рд╢реА рдирд╛рддреЗ, model рд╢реА рд╕рдВрд╡рд╛рдж рдЖрдгрд┐ рдкрд░рд╡рд╛рдирдЧреАрдЪреЗ рд╕рдЧрд│реЗ рдирд┐рд░реНрдгрдп рддреНрдпрд╛рдЪреНрдпрд╛рдХрдбреЗ. рдПрдХ host, рдЕрдиреЗрдХ clients.
- Client = рдПрдХрд╛ server рд╢реА рдПрдХ connection; protocol рдмреЛрд▓рддреЛ, discovery рдЖрдгрд┐ calls рдкреБрдвреЗ рдкреЛрд╣реЛрдЪрд╡рддреЛ. рдореБрджреНрджрд╛рдо рдХрдВрдЯрд╛рд│рд╡рд╛рдгрд╛ тАФ plumbing рддрд╕реЗрдЪ рдЕрд╕рд╛рд╡реЗ.
- Server = рдХреНрд╖рдорддреЗрднреЛрд╡рддреАрдЪреЗ рдЖрд╡рд░рдг. Local (host рддреНрдпрд╛рд▓рд╛ child process рдореНрд╣рдгреВрди рд╕реБрд░реВ рдХрд░рддреЛ тАФ stdio) рдХрд┐рдВрд╡рд╛ remote (Streamable HTTP, рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рдУрд│рдЦреАрд╕рд╣). рддреЛ рдХрд╛рдп рджреЗрддреЛ рддреЗ рдЬрд╛рд╣реАрд░ рдХрд░рддреЛ (рдзрдбрд╛ 03) рдЖрдгрд┐ calls рдирд╛ рдЙрддреНрддрд░ рджреЗрддреЛ. рддреЛ рддреБрдордЪреЗ рдЗрддрд░ servers, рддреБрдордЪреА prompt history рдХрд┐рдВрд╡рд╛ model рд╕реНрд╡рддрдГ рдХрдзреАрдЪ рдкрд╛рд╣рдд рдирд╛рд╣реА тАФ рдлрдХреНрдд рд╕реНрд╡рддрдГрдЪрд╛ рд╕рдВрд╡рд╛рдж.
- рд╡реЗрдЧрд│реЗрдкрдг рд╣реЗ рд╡реИрд╢рд┐рд╖реНрдЯреНрдп рдЖрд╣реЗ: filesystem server рдиреЗ рдХрд╛рдп рд╕рд╛рдВрдЧрд┐рддрд▓реЗ рддреЗ GitHub server рд╡рд╛рдЪреВ рд╢рдХрдд рдирд╛рд╣реА; рдкреНрд░рддреНрдпреЗрдХ socket рдЪреЗ рд╕реНрд╡рддрдГрдЪреЗ рд╡реЗрдЧрд│реЗ circuit рдЕрд╕рддреЗ.
ЁЯдФ рдХрд╛
рдкреНрд░рддреНрдпреЗрдХ debugging session рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ security рдкреНрд░рд╢реНрди рдпрд╛ рдирдХрд╛рд╢рд╛рддреВрдирдЪ рдЬрд╛рддреЛ: "model рдиреЗ X рдХреЗрд▓реЗ" рдореНрд╣рдгрдЬреЗ рдЬрд╡рд│рдЬрд╡рд│ рдиреЗрд╣рдореА "HOST рдиреЗ X рдХрд░реВ рджрд┐рд▓реЗ". рдЖрдгрд┐ рдПрдЦрд╛рджреНрдпрд╛ рдЕрдиреЛрд│рдЦреА рд╡реНрдпрдХреНрддреАрдиреЗ рд▓рд┐рд╣рд┐рд▓реЗрд▓рд╛ server рддреБрдордЪреНрдпрд╛ рдЦреЛрд▓реАрдд тАФ рддреНрдпрд╛рдЪреНрдпрд╛рдмрджреНрджрд▓ рдХрд╛рд╣реАрд╣реА рдорд╛рд╣реАрдд рдирд╕рддрд╛рдирд╛ тАФ рдЪрд╛рд▓рддреЛ, рдпрд╛рдЪреЗ рдХрд╛рд░рдг рднреВрдорд┐рдХрд╛ рдлрдХреНрдд рдорд╛рдирдХ socket рд╡рд░рдЪ рднреЗрдЯрддрд╛рдд. рдЕрд░реБрдВрдж interfaces, рдмрджрд▓рддрд╛ рдпреЗрдгрд╛рд░реЗ рднрд╛рдЧ: рд╣реАрдЪ рд╕рдВрдкреВрд░реНрдг рдпреБрдХреНрддреА.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
python3 client/mini_client.py
рдЖрддрд╛ рдЬреЗ рджрд┐рд╕рддреЗ рддреНрдпрд╛рддреАрд▓ рднреВрдорд┐рдХрд╛ рдУрд│рдЦрд╛: mini_client.py host рдЖрдгрд┐ client рджреЛрдиреНрд╣реА
рдмрдирд▓рд╛ рдЖрд╣реЗ (рддреЛ child рд╕реБрд░реВ рдХрд░рддреЛ рдЖрдгрд┐ socket рддреНрдпрд╛рдЪреНрдпрд╛рдХрдбреЗ рдЖрд╣реЗ);
school_server.py рд╣реЗ рдЙрдкрдХрд░рдг рдЖрд╣реЗ; рдЖрдгрд┐ рднрд╛рдЧ 3 рдордзреАрд▓ scripted calls model рдЪреНрдпрд╛
рд╕реВрдЪрдиреЗрдЪреА рдЬрд╛рдЧрд╛ рдШреЗрддрд╛рдд. рдордЧ --drive рд╕рд╣ рдЪрд╛рд▓рд╡рд╛ тАФ рдЖрддрд╛ model рддреБрдореНрд╣реА рдЖрд╣рд╛рдд, рдЖрдгрд┐ рд▓рдХреНрд╖рд╛рдд
рдШреНрдпрд╛: рддреБрдореНрд╣реА рдлрдХреНрдд рд╕реБрдЪрд╡реВ рд╢рдХрддрд╛; host рдордзреНрдпрд╕реНрдереА рдХрд░рддреЛ рдЖрдгрд┐ рдкреНрд░рддреНрдпрдХреНрд╖ рд╕реНрдкрд░реНрд╢ client рдХрд░рддреЛ.
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
Scripted run рдордзреНрдпреЗ тЖТ рдУрд│реА рдореНрд╣рдгрдЬреЗ client (socket) рдмреЛрд▓рддреЛ рдЖрдгрд┐ тЖР рдУрд│реА рдореНрд╣рдгрдЬреЗ server; model рдЬреЗ рдмреЛрд▓реЗрд▓ рддреЗ wire рд╡рд░ рдХрдзреАрдЪ рджрд┐рд╕рдд рдирд╛рд╣реА. --drive рдордзреНрдпреЗ рддреБрдореНрд╣реА call рд╕рд╛рдареА рд╡рд┐рдирдВрддреА рдЯрд╛рдЗрдк рдХрд░рддрд╛ рдЖрдгрд┐ host рддрд┐рдЪреЗ tools/call рдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░ рдХрд░рддреЛ.
ЁЯПБ рддреБрдореНрд╣реА рдЖрддреНрддрд╛рдЪ рдХрд╛рдп рд╕рд┐рджреНрдз рдХреЗрд▓реЗ
рддреАрди рднреВрдорд┐рдХрд╛ code рдордзреНрдпреЗ рд╡реЗрдЧрд│реНрдпрд╛ рдХрд░рддрд╛ рдпреЗрддрд╛рдд: MiniHost (рдЦреЛрд▓реА + socket) рдЖрдгрд┐ school_server.py (рдЙрдкрдХрд░рдг) рдлрдХреНрдд wire рд╡рд░ рднреЗрдЯрддрд╛рдд; model рдХрдзреАрдЪ socket рд▓рд╛ рд╣рд╛рдд рд▓рд╛рд╡рдд рдирд╛рд╣реА.
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- рд╕рдВрдкреВрд░реНрдг app рд▓рд╛ 'client' рдореНрд╣рдгрдгреЗ тАФ client рдореНрд╣рдгрдЬреЗ рдПрдХрд╛ server рд╢реА рдПрдХ connection; user, model рдЖрдгрд┐ рдкрд░рд╡рд╛рдирдЧреАрдЪреЗ рдирд┐рд░реНрдгрдп host рдХрдбреЗ рдЕрд╕рддрд╛рдд
- server рд▓рд╛ рддреБрдордЪреНрдпрд╛ рдЗрддрд░ servers рдХрд┐рдВрд╡рд╛ рд╕рдВрд╡рд╛рджрд╛рдмрджреНрджрд▓ рдорд╛рд╣реАрдд рдЕрд╕реЗрд▓ рдЕрд╕реЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рдзрд░рдгреЗ тАФ рддреЛ рдлрдХреНрдд рд╕реНрд╡рддрдГрдЪреА wire рдкрд╛рд╣рддреЛ
- model рдереЗрдЯ tools call рдХрд░реВ рд╢рдХрддреЛ рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░рдгреЗ тАФ рддреЛ рдлрдХреНрдд рд╕реБрдЪрд╡реВ рд╢рдХрддреЛ; host рдордзреНрдпрд╕реНрдереА рдХрд░рддреЛ (рдзрдбрд╛ 07)
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ: "рдХреЛрдг рдХрд╛рдп рдард░рд╡рддреЗ" рд╣реАрдЪ рддреБрдордЪреА security architecture рдЖрд╣реЗ. Permission prompts, allow-lists рдЖрдгрд┐ logs host рдордзреНрдпреЗ рдареЗрд╡рд╛, рдХрд╛рд░рдг model рдЪреА рд╕реВрдЪрдирд╛ рдЖрдгрд┐ user рджреЛрдиреНрд╣реА рдкрд╛рд╣рдгрд╛рд░реА рддреА рдПрдХрдореЗрд╡ рдЬрд╛рдЧрд╛ рдЖрд╣реЗ.
тПня╕П рдкреБрдвреЗ
рдЙрдкрдХрд░рдг рдирдХреНрдХреА рдХрд╛рдп рджреЗрдК рд╢рдХрддреЗ? рддреАрди рдХрдкреНрдкреЗ: tools, resources, prompts.
git checkout lesson-03-primitives