ЁЯФМ рдзрдбрд╛ 07 тАФ Client/host рдмрд╛рдВрдзрд╛: рд╕рддреНрддрд╛ рдЕрд╕рд▓реЗрд▓реА рдмрд╛рдЬреВ
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 8 рдкреИрдХреА рдзрдбрд╛ 07 ┬╖ рдорд╛рдЧреЗ: lesson-06-build-a-server ┬╖ рдкреБрдвреЗ: lesson-08-use-cases
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ06, рдЖрдгрд┐
client/mini_client.py рдЪреЗ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдд рд╡рд╛рдЪрди тАФ рдЦреЛрд▓реА,
socket, рдЖрдгрд┐ (--drive mode рдордзреНрдпреЗ) рд╡рд┐рджреНрдпрд╛рд░реНрдерд┐рдиреА рдореНрд╣рдгреВрди рддреБрдореНрд╣реА.
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
Client рдмрд╛рдЬреВрдЪреА рддреАрди рдХрд╛рдореЗ рдЖрд╣реЗрдд, рдЖрдгрд┐ рдЖрдкрд▓рд╛ ~105 рдУрд│реАрдВрдЪрд╛ host рддрд┐рдиреНрд╣реА рдХрд░рддреЛ:
- рд╕реБрд░реВ рдХрд░рд╛ рдЖрдгрд┐ рдЬреЛрдбрд╛ ЁЯФМ тАФ
subprocess.Popen([...python, server]): stdio transport рдореНрд╣рдгрдЬреЗ рдлрдХреНрдд "child рд╕реБрд░реВ рдХрд░рд╛, рддреНрдпрд╛рдЪреЗ stdin/stdout рдзрд░реВрди рдареЗрд╡рд╛" (L05, live). рдПрдХMiniHost= рдПрдХ socket = рдПрдХ server (L02). - Badge рдШрд╛рд▓рд╛ ЁЯкк тАФ
send()JSON-RPC рдмрдирд╡рддреЛ: рд╡рд╛рдврдд рдЬрд╛рдгрд╛рд░рд╛idрд▓рд╛рд╡рддреЛ, рдкреНрд░рддреНрдпреЗрдХ request рд▓рд╛_metabadge (рдЖрд╡реГрддреНрддреА,clientInfo,clientCapabilities) рдЬреЛрдбрддреЛ, рдПрдХ рдУрд│ рд▓рд┐рд╣рд┐рддреЛ, рдПрдХ рдУрд│ рд╡рд╛рдЪрддреЛ, рдЙрддреНрддрд░рд╛рдЪреА id рдиреЗ рдЬреЛрдбрдгреА рдХрд░рддреЛ. рдордЧmain()L04 рдЪрд╛ рдиреЗрдордХрд╛ рдХреНрд░рдо рдкрд╛рд░ рдкрд╛рдбрддреЛ: server/discover (рдРрдЪреНрдЫрд┐рдХ) тЖТ tools/list тЖТ tools/call. - Model рдЖрдгрд┐ рдЬрдЧ рдпрд╛рдВрдЪреНрдпрд╛рдордзреНрдпреЗ рдмрд╕рд╛ ЁЯзатЖТЁЯФМ тАФ scripted mode рдордзреНрдпреЗ, рддреАрди рддрдпрд╛рд░ calls
"agent рдХрд╛рдп рдХрд░реЗрд▓" рдпрд╛рдЪрд╛ рдЕрднрд┐рдирдп рдХрд░рддрд╛рдд.
--drivemode рдордзреНрдпреЗ, calls рддреБрдореНрд╣реА рдЯрд╛рдЗрдк рдХрд░рддрд╛ тАФ рдЖрдгрд┐ рдпрд╛ рдордЬреЗрдд рд▓рдкрд▓реЗрд▓рд╛ рдзрдбрд╛: model рдордЬрдХреБрд░рд╛рдд call рд╕реБрдЪрд╡рддреЛ; host рдордзреНрдпрд╕реНрдереА рдХрд░рддреЛ. рдЪрд╛рд▓рд╡рд╛рдпрдЪреЗ рдХреА рдирд╛рд╣реА рддреЗ host рдирд┐рд╡рдбрддреЛ тАФ рдЖрдгрд┐ server рдЪреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рдкреНрд░рд╢реНрдирд╛рдВрдирд╛ рдЙрддреНрддрд░ рджреЗрдгрд╛рд░реА рдмрд╛рдЬреВрд╣реА рддреАрдЪ (input_requiredрдЪрд┐рдиреНрд╣рд╛рдВрдХрд┐рдд results, server рдиреЗ рд╕реБрд░реВ рдХреЗрд▓реЗрд▓реНрдпрд╛ sampling/elicitation requests рдЪреА рдЖрд╡реГрддреНрддреА 2026-07-28 рдордзреАрд▓ рдЬрд╛рдЧрд╛ рдШреЗрдгрд╛рд░реЗ). рдореНрд╣рдгрдЬреЗ permission prompts, allow-lists, write-gates (L05 рдзреЛрд░рдг 3!) рдЖрдгрд┐ logs host рдордзреНрдпреЗрдЪ рдЕрд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗрдд. рд╕рддреНрддрд╛ hosts рдХрдбреЗ рдЕрд╕рддреЗ; рддреЗ рд░рдЪрдиреЗрдиреБрд╕рд╛рд░рдЪ рдЖрд╣реЗ.
рдЦрд░рд╛ host рдиреЗрдордХреЗ рддреЗрдЪ рдЬреЛрдбрддреЛ рдЬреЗ рддреБрдореНрд╣реА рдЕрдВрджрд╛рдЬ рдХрд░рд╛рд▓: calls рд╕реБрдЪрд╡рдгрд╛рд░рд╛ рдЦрд░рд╛ model (AI рдХреЛрд░реНрд╕ L11 рдЪрд╛ loop), model рдЪреНрдпрд╛ context рд▓рд╛ рдЬреЛрдбрд▓реЗрд▓реЗ tool results (рдмрд╛рдХ, AI рдХреЛрд░реНрд╕ L08), рдПрдХрд╛рдЪ рд╡реЗрд│реА рдЕрдиреЗрдХ sockets, рдЖрдгрд┐ рд╕рдВрдорддреАрдЪрд╛ UI. Plumbing рдЪреНрдпрд╛ рджреГрд╖реНрдЯреАрдиреЗ? рддреБрдореНрд╣реА рдЖрддрд╛ рддреЗ рд╕рдЧрд│реЗ рд╡рд╛рдЪрд▓реЗ рдЖрд╣реЗ.
ЁЯЧ║я╕П рдЖрдХреГрддреА
sequenceDiagram
participant U as ЁЯзС you (--drive: the model)
participant H as ЁЯПл MiniHost (room + socket)
participant S as ЁЯФм school_server (child process)
U->>H: 1 "call lookup_grade {student: katrina}"
Note over H: 2 the POWER moment: host decides<br/>(real hosts: permission check here ЁЯЪз)
H->>S: 3 tools/call {name, arguments, id: 4}
S-->>H: 4 {id: 4, content: [{text: "Katrina (3A) has grade A+."}]}
H-->>U: 5 "ЁЯУД lands on the desk: тАж"
Note over U,S: the model proposes ┬╖ the host mediates ┬╖ the server provides
ЁЯУЦ рдпрд╛ рдУрд│реА рд╡рд╛рдЪрд╛ (рдореНрд╣рдгрдЬреЗ рддреБрдореНрд╣реА рд╣рд░рд╡рдгрд╛рд░ рдирд╛рд╣реА)
- рдУрд│реА 19тАУ23: рдкреНрд░рддреНрдпреЗрдХ request рдШрд╛рд▓рддреЛ рддреЛ badge (
BADGE) - рдУрд│реА 25тАУ34: child process рд╕реБрд░реВ рдХрд░рдгреЗ тАФ stdio transport
- рдУрд│реА 35тАУ50:
send()тАФ рдПрдХ request, рдПрдХ reply, id рдиреЗ рдЬреЛрдбрд▓реЗрд▓реЗ - рдУрд│реА 52тАУ60:
show()тАФ рдмрд╛рдХрд╛рд╡рд░рдЪрд╛ result, рдХрд┐рдВрд╡рд╛ рд╕рдордЬрд╛рд╡рд▓реЗрд▓реА error - рдУрд│реА 62тАУ76:
main()тАФ рдУрд│рдЦ, discovery - рдУрд│реА 77тАУрд╢реЗрд╡рдЯ:
--driveтАФ рд╕рддреНрддреЗрдЪрд╛ рдХреНрд╖рдг; рдлрд╛рдЯрдХtools/callрдЪреНрдпрд╛ рдЕрдЧрджреА рдЖрдзреА рдпреЗрддреЗ
тЭУ рдХрд╛рдп (рдЪреЛрд░рдгреНрдпрд╛рд╕рд╛рд░рдЦреЗ рддрдкрд╢реАрд▓)
- id рдЪрд╛ рд╣рд┐рд╢реЗрдм рд╣реАрдЪ client рдЪреА рд╕рдВрдкреВрд░реНрдг рдпреБрдХреНрддреА: send рд╡рд░
self.next_id += 1, receive рд╡рд░ рдЬреЛрдбрдгреА. Async hosts pending-map рдареЗрд╡рддрд╛рдд; рдЖрдкрд▓рд╛ synchronously рд╡рд╛рдЪрддреЛ, рдореНрд╣рдгреВрди рдЕрдЧрджреА рдкреБрдврдЪреА рдУрд│ рдореНрд╣рдгрдЬреЗрдЪ рдЙрддреНрддрд░. - Errors рд╡рд┐рд░реБрджреНрдз results:
send()рд╕рдВрдкреВрд░реНрдг response рдкрд░рдд рджреЗрддреЛ. JSON-RPCerror(рдЕрдЬреНрдЮрд╛рдд tool-32602, рдЪреБрдХреАрдЪреА рдЖрд╡реГрддреНрддреА-32022) рд╣реА host рдиреЗ рд╣рд╛рддрд╛рд│рд╛рдпрдЪреА protocol рд╕рдорд╕реНрдпрд╛ рдЖрд╣реЗ; result рдЪреНрдпрд╛ рдЖрддisError: trueрдореНрд╣рдгрдЬреЗ tool рдмреЛрд▓рддреЛ рдЖрд╣реЗ тАФ рддреА model рд▓рд╛ рджрд╛рдЦрд╡рд╛.show()рджреЛрдиреНрд╣реА рдХрд░рддреЛ. - рдЦрд░реЗ hosts рд╣реЗрд╣реА рдХрд░рддрд╛рдд:
isErrorresults model рд▓рд╛ рджрд╛рдЦрд╡реВрди рд╣рд╛рддрд╛рд│рддрд╛рдд (retries!), рдореЗрд▓реЗрд▓реЗ children рдкреБрдиреНрд╣рд╛ рдЬреЛрдбрддрд╛рдд, рдЖрдгрд┐ рдЕрдиреЗрдХ servers рдЪреНрдпрд╛ tool lists model рд╕рд╛рдареА рдПрдХрд╛рдЪ рдХрдкреНрдкреНрдпрд╛рдд рдПрдХрддреНрд░ рдХрд░рддрд╛рдд. - LLM API call рдХреБрдареЗ рдЖрд╣реЗ? рдореБрджреНрджрд╛рдо рдирд╛рд╣реА тАФ
--driveрдордзреАрд▓input()рдРрд╡рдЬреА model call рд▓рд╛рд╡рд╛ рдЖрдгрд┐ рддреБрдордЪреНрдпрд╛рдХрдбреЗ рдЦрд░рд╛ agent host рддрдпрд╛рд░. (AI рдХреЛрд░реНрд╕рдЪреНрдпрд╛ L11 lab рдордзреНрдпреЗ рд╣реЗ paste рдиреЗ рдХреЗрд▓реЗ рд╣реЛрддреЗ; рдЗрдереЗ рддреЗ рдПрдХ function рдЖрд╣реЗ.)
ЁЯдФ рдХрд╛
"model рдлрдХреНрддтАж рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА рдХрд╛?" рдЕрд╢рд╛ рд╕реНрд╡рд░реВрдкрд╛рдЪреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ MCP рдкреНрд░рд╢реНрдирд╛рдЪреЗ рдЙрддреНрддрд░ рд╣реА file рджреЗрддреЗ: рдирд╛рд╣реА тАФ рддреЛ рдлрдХреНрдд рд╕реБрдЪрд╡реВ рд╢рдХрддреЛ; host рдордзреНрдпрд╕реНрдереА рдХрд░рддреЛ. Host рдЪрд╛ рд╣рд╛ рдЕрд░реБрдВрдж рдорд╛рд░реНрдЧ рд╕рдордЬрд▓рд╛ рдХреА safety рдХреБрдареЗ рд░рд╛рд╣рддреЗ, server рдЪреНрдпрд╛ рд╕рдВрдЦреНрдпреЗрдкреЗрдХреНрд╖рд╛ host рдЪреА рдЧреБрдгрд╡рддреНрддрд╛ рдХрд╛ рдЬрд╛рд╕реНрдд рдорд╣рддреНрддреНрд╡рд╛рдЪреА, рдЖрдгрд┐ рдПрдЦрд╛рджреНрдпрд╛ app рдЪреНрдпрд╛ MCP settings рдордзреНрдпреЗ "always allow" toggle рдХрд░рддрд╛рдирд╛ рддреБрдореНрд╣реА рдирдХреНрдХреА рдХрд╢рд╛рд╡рд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдареЗрд╡рддрд╛ рддреЗ рдХрд│рддреЗ (рддреБрдореНрд╣реА рд╡рд░рдЪреНрдпрд╛ sequence рдЖрдХреГрддреАрдЪреА рдУрд│ 2 рд╣рдЯрд╡рдд рдЕрд╕рддрд╛ ЁЯШД).
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
python3 client/mini_client.py --drive
# model calls> get_student_count {"class_name":"3B"}
# model calls> add_homework {"title":"build my own host"}
рдордЧ L05 рдордзреАрд▓ рдПрдХрд╛ рдУрд│реАрдЪреА рддрд╛рдХрджрд╡рд╛рдв: --drive mode рдордзреНрдпреЗ tools/call рдЪреНрдпрд╛ рдЖрдзреА
write-gate рдЬреЛрдбрд╛ (if name.startswith("add"): input("allow? ")).
рдкреБрдиреНрд╣рд╛ рдЪрд╛рд▓рд╡рд╛, рдлрд░рдХ рдЕрдиреБрднрд╡рд╛. --drive prompt рдЪрд╛рд░ рдХреНрд░рдо рд╕реБрдЪрд╡рддреЛ (aтАУd): (a) рджреЛрди reads,
(b) model рдкреНрд░рддрд┐рд╕рд╛рдж рджреЗрдК рд╢рдХреЗрд▓ рдЕрд╢реА tool error, (c) рдЧрд╣рд╛рд│ рдлрд╛рдЯрдХ, (d) host рдЯрд┐рдХреВрди рд░рд╛рд╣рддреЛ рдЕрд╢реА
protocol error тАФ рд╕рдЧрд│реЗ рдЪрд╛рд▓рд╡рд╛. рдЖрддрд╛ рддреБрдореНрд╣реА MCP рдЪреНрдпрд╛ рджреЛрдиреНрд╣реА рдмрд╛рдЬреВ рдЖрдгрд┐ рддреНрдпрд╛рдЪреЗ рд╕рд░реНрд╡рд╛рдд
рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ safety feature рдмрд╛рдВрдзрд▓реЗ рдЖрд╣реЗ. ЁЯФМ
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
--drive рдордзреНрдпреЗ tools/call рдЪреНрдпрд╛ рдЖрдзреА рд╕рд╣рд╛ рдУрд│реАрдВрдЪреЗ рдлрд╛рдЯрдХ рдЬреЛрдбрд▓реНрдпрд╛рд╡рд░ add_homework allow? рд╕рд╛рдареА рдерд╛рдВрдмрддреЛ рдЖрдгрд┐ n рджрд┐рд▓реНрдпрд╛рд╕ рдмрд╛рдХрд╛рд╡рд░ рдХрд╛рд╣реАрдЪ рдЫрд╛рдкрд▓реЗ рдЬрд╛рдд рдирд╛рд╣реА, рддрд░ lookup_grade рди рд╡рд┐рдЪрд╛рд░рддрд╛ рдЪрд╛рд▓рдд рд░рд╛рд╣рддреЛ. fly_to_moon {} тЭМ server error -32602 рдЫрд╛рдкрддреЛ рдЖрдгрд┐ loop рдЪрд╛рд▓реВ рд░рд╛рд╣рддреЛ тАФ host protocol error рдордзреВрди рдЯрд┐рдХрд▓рд╛.
ЁЯПБ рддреБрдореНрд╣реА рдЖрддреНрддрд╛рдЪ рдХрд╛рдп рд╕рд┐рджреНрдз рдХреЗрд▓реЗ
Host рд╣реАрдЪ рд╕рддреНрддреЗрдЪреА рд╕реАрдорд╛ рдЖрд╣реЗ: model рдЪреА рд╕реВрдЪрдирд╛ рдЖрдгрд┐ wire рдпрд╛рдВрдЪреНрдпрд╛рдордзреНрдпреЗ рддреБрдореНрд╣реА рдорд╛рдгрд╕рд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШрд╛рддрд▓рд╛, рджреЛрдиреНрд╣реА рдкрд╛рд╣реВ рд╢рдХрдгрд╛рд▒реНрдпрд╛ рдПрдХрдореЗрд╡ рдЬрд╛рдЧреА.
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- notification рдкрд╛рдард╡рд▓реНрдпрд╛рд╡рд░ reply рдЪреА рд╡рд╛рдЯ рдкрд╛рд╣рдгреЗ тАФ id рдирд╕рд▓реЗрд▓реНрдпрд╛ messages рд╕рд╛рдареА server рд▓рд╛ рдХрд╛рд╣реАрдЪ рджреЗрдгреЗ рдирд╕рддреЗ (deadlock)
isErrorresults model рд▓рд╛ рди рджрд╛рдЦрд╡рддрд╛ рдЧрд┐рд│реВрди рдЯрд╛рдХрдгреЗ тАФ retries рдЕрдкрдпрд╢ рджрд┐рд╕рдгреНрдпрд╛рд╡рд░рдЪ рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕рддрд╛рдд- JSON-RPC error рдиреЗ host рдорд╛рд░реВ рджреЗрдгреЗ тАФ
errorresponses рд╣рд╛рддрд╛рд│рд╛, loop рдЬрд┐рд╡рдВрдд рдареЗрд╡рд╛ - рдЦрд▒реНрдпрд╛ host рдЪреНрдпрд╛ settings рдордзреАрд▓ "always allow" sequence рдЖрдХреГрддреАрдЪреА рдкрд╛рдпрд░реА 2 рд╣рдЯрд╡рддреЗ тАФ рддреБрдореНрд╣реА рддреЗрдЪ toggle рдХрд░рдд рдЖрд╣рд╛рдд рд╣реЗ рдЬрд╛рдгреВрди рдШреНрдпрд╛
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ: hosts рдЕрдиреЗрдХ servers рдЪреНрдпрд╛ tool lists рдПрдХрд╛ рдХрдкреНрдкреНрдпрд╛рдд рдПрдХрддреНрд░ рдХрд░рддрд╛рдд, рдореЗрд▓реЗрд▓реЗ child processes рдкреБрдиреНрд╣рд╛ рдЬреЛрдбрддрд╛рдд, рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ call рднреЛрд╡рддреА рд╕рдВрдорддреАрдЪрд╛ UI, allow-lists рдЖрдгрд┐ audit logs рдареЗрд╡рддрд╛рдд. Server рдЪреНрдпрд╛ рд╕рдВрдЦреНрдпреЗрдкреЗрдХреНрд╖рд╛ host рдЪреА рдЧреБрдгрд╡рддреНрддрд╛ рдЬрд╛рд╕реНрдд рдорд╣рддреНрддреНрд╡рд╛рдЪреА.
тПня╕П рдкреБрдвреЗ
рд╢реЗрд╡рдЯрдЪрд╛ рдЯрдкреНрдкрд╛: рдкрд╛рдЪ рдЦрд▒реНрдпрд╛ рдЬрдЧрд╛рддреАрд▓ рд░рдЪрдирд╛ тАФ coding, support, data, рдмреИрдардХрд╛, automation тАФ рдкреНрд░рддреНрдпреЗрдХреА рдХреНрд░рдорд╛рдВрдХрд┐рдд flow рдЖрдгрд┐ sequence рдЖрдХреГрддреАрд╕рд╣.
git checkout lesson-08-use-cases