ЁЯПл The SchoolтА║ЁЯФМ MCPтА║ЁЯз░ рдзрдбрд╛ 03 тАФ рддреАрди primitives: tools, resources, prompts
ЁЯЦ╝я╕П See the drawing + lab ЁЯПа Course home ЁЯМ┐ Branch on GitHub тЬПя╕П View source
ЁЯЦ╝я╕П рдЖрдХреГрддреА рдЖрдгрд┐ labThe drawing + lab рдкреВрд░реНрдг рдкрд╛рдирд╛рд╡рд░ рдЙрдШрдбрд╛ тЖЧOpen full page тЖЧ

ЁЯз░ рдзрдбрд╛ 03 тАФ рддреАрди primitives: tools, resources, prompts

ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 8 рдкреИрдХреА рдзрдбрд╛ 03 ┬╖ рдорд╛рдЧреЗ: lesson-02-architecture ┬╖ рдкреБрдвреЗ: lesson-04-the-wire


ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ

рдзрдбреЗ 01тАУ02, рдЖрдгрд┐ server рджреЗрдК рд╢рдХрддреЛ рдЕрд╢рд╛ рддреАрди рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рдЧреЛрд╖реНрдЯреА тАФ рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХреЗрд╡реНрд╣рд╛ рд╡рд╛рдкрд░рд╛рдпрдЪреА рддреЗ рдХреЛрдг рдард░рд╡рддреЗ.

ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ

рдЙрдкрдХрд░рдг рдЖрдкрд▓реНрдпрд╛ рджреЗрдгрдЧреНрдпрд╛ рддреАрди рд▓реЗрдмрд▓ рд▓рд╛рд╡рд▓реЗрд▓реНрдпрд╛ рдХрдкреНрдкреНрдпрд╛рдВрд╡рд░ рдЬрд╛рд╣реАрд░ рдХрд░рддреЗ:

  1. ЁЯз░ Tools тАФ "рд╡рд┐рджреНрдпрд╛рд░реНрдерд┐рдиреАрд╕рд╛рдареА рдореА рдЬреНрдпрд╛ рдЧреЛрд╖реНрдЯреА рдХрд░реВ рд╢рдХрддреЛ." Inputs рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдХреГрддреА: lookup_grade(student), query_db(sql), send_email(...). рддреНрдпрд╛ рдХреЗрд╡реНрд╣рд╛ call рдХрд░рд╛рдпрдЪреНрдпрд╛ рддреЗ MODEL рдард░рд╡рддреЛ (host рдЪреНрдпрд╛ рдкрд░рд╡рд╛рдирдЧреАрдиреЗ тАФ L02!). рдЖрдЬрдЪреЗ 90% servers рдпрд╛рдЪ рдХрдкреНрдкреНрдпрд╛рдиреЗ рд╕реБрд░реБрд╡рд╛рдд рдХрд░рддрд╛рдд, рдЖрдгрд┐ рдЖрдкрд▓рд╛ school server рдлрдХреНрдд рд╣рд╛рдЪ рдХрдкреНрдкрд╛ рднрд░рддреЛ.
  2. ЁЯУБ Resources тАФ "рдорд╛рдЭреНрдпрд╛рдХрдбреВрди рддреБрдореНрд╣реА рд╡рд╛рдЪреВ рд╢рдХрддрд╛ рдЕрд╢рд╛ рдЧреЛрд╖реНрдЯреА." рдкрддреНрддреЗ рдЕрд╕рд▓реЗрд▓рд╛ context: рдПрдХ file, database рдордзреАрд▓ рдПрдХ record, рдПрдХ log. рдмрд╛рдХрд╛рд╡рд░ рдХрд╛рдп рдЬреЛрдбрд╛рдпрдЪреЗ рддреЗ HOST/APP рдард░рд╡рддреЗ (AI рдХреЛрд░реНрд╕ L08) тАФ рдЬрд╕реЗ рд╡рд░реНрдЧ рд╕реБрд░реВ рд╣реЛрдгреНрдпрд╛рдкреВрд░реНрд╡реА рд╡рд┐рджреНрдпрд╛рд░реНрдерд┐рдиреАрдЪреНрдпрд╛ рдмрд╛рдХрд╛рд╡рд░ рдХреЛрдгрддреА handouts рдареЗрд╡рд╛рдпрдЪреА рддреЗ рд╢рд┐рдХреНрд╖рд┐рдХрд╛ рдирд┐рд╡рдбрддреЗ.
  3. ЁЯУЬ Prompts тАФ "рдореА рд╕реБрдЪрд╡рддреЛ рддреНрдпрд╛ рдХреГрддреА-рдкрджреНрдзрддреА." Server рд╕реЛрдмрдд рдпреЗрдгрд╛рд░реЗ рдЖрдзреАрдЪ рд▓рд┐рд╣рд┐рд▓реЗрд▓реЗ prompt templates: "ticket рдЪрд╛ рд╕рд╛рд░рд╛рдВрд╢ рдЕрд╕рд╛ рдХрд░рд╛". рддреЗ USER рдирд┐рд╡рдбрддреЛ (slash-commands, menu items) тАФ рдЬрд╕реЗ рдЙрдкрдХрд░рдгрд╛рдЪреНрдпрд╛ рдирд┐рд░реНрдорд╛рддреНрдпрд╛рдиреЗ рдбрдмреНрдпрд╛рдд рдареЗрд╡рд▓реЗрд▓реНрдпрд╛ worksheets.

рдкреНрд░рддреНрдпреЗрдХреА рдПрдХ рдирд┐рд░реНрдгрдп: modelтЖТtools, appтЖТresources, userтЖТprompts. рд╣реЗрдЪ рд╕рдВрдкреВрд░реНрдг рд╡рд░реНрдЧреАрдХрд░рдг тАФ рджреЛрдирджрд╛ рдореНрд╣рдгрд╛ рдЖрдгрд┐ servers рдмрдирд╡рдгрд╛рд▒реНрдпрд╛ рдмрд╣реБрддреЗрдХ рд▓реЛрдХрд╛рдВрдкреЗрдХреНрд╖рд╛ рддреБрдореНрд╣рд╛рд▓рд╛ MCP рдЬрд╛рд╕реНрдд рдХрд│реЗрд▓. ЁЯШД

ЁЯЧ║я╕П рдЖрдХреГрддреА

flowchart TB
    subgraph server["ЁЯФм what a server offers"]
        tools["ЁЯз░ TOOLS - actions with inputs<br/>lookup_grade ┬╖ add_homework"]
        res["ЁЯУБ RESOURCES - readable context<br/>file://report.pdf ┬╖ db://students/3A"]
        prompts["ЁЯУЬ PROMPTS - suggested recipes<br/>'/summarize-ticket'"]
    end
    m["ЁЯза model decides<br/>(host permitting)"]
    a["ЁЯПл app decides<br/>what's on the desk"]
    u["ЁЯзС user picks<br/>from a menu"]
    tools --- m
    res --- a
    prompts --- u

тЭУ рдХрд╛рдп

рдХреЛрдг рд╕реБрд░реВ рдХрд░рддреЛ, рдХреЛрдг рд╡рд╛рдкрд░рддреЛ тАФ рддреАрди рдХрдкреНрдкреНрдпрд╛рдВрд╕рд╛рдареА рдПрдХ рддрдХреНрддрд╛:

рдХрдкреНрдкрд╛ рдХреЛрдг рд╕реБрд░реВ рдХрд░рддреЛ рдХреЛрдг рд╡рд╛рдкрд░рддреЛ Wire verbs
ЁЯз░ tools model рд╕реБрдЪрд╡рддреЛ (host рдЪреНрдпрд╛ рдкрд░рд╡рд╛рдирдЧреАрдиреЗ) model тАФ result тЖТ рдмрд╛рдХ tools/list, tools/call
ЁЯУБ resources host/app рдЬреЛрдбрддреЗ model тАФ рдмрд╛рдХрд╛рд╡рд░рдЪрд╛ context resources/list, resources/read
ЁЯУЬ prompts user рдирд┐рд╡рдбрддреЛ (menu, slash-command) model / app prompts/list, prompts/get

ЁЯдФ рдХрд╛

Teams рд╕рдЧрд│реЗрдЪ tools рдордзреНрдпреЗ рдХреЛрдВрдмреВрди servers рдЪреА рд░рдЪрдирд╛ рдЪреБрдХрд╡рддрд╛рдд ("read_file рд╣рд╛ tool!" тАФ рдХрдзреА рдХрдзреА рдмрд░реЛрдмрд░, рдкрдг context рдЪреЗ рдирд┐рдпрдВрддреНрд░рдг APP рдХрдбреЗ рдЕрд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ рдЕрд╕реЗрд▓, рддрд░ рддреЛ resource рдЖрд╣реЗ). рдкреНрд░рддреНрдпреЗрдХ рдХрдкреНрдкреНрдпрд╛рд╕рд╛рдареА рдХреЛрдг рдард░рд╡рддреЛ тАФ model/app/user тАФ рд╣реЗ рдЬрд╛рдгрдгреЗ рдореНрд╣рдгрдЬреЗ рд░рдЪрдиреЗрдЪрд╛ рд╣реЛрдХрд╛рдпрдВрддреНрд░. рддреЛ security рдЪрд╛рд╣реА рд╣реЛрдХрд╛рдпрдВрддреНрд░ рдЖрд╣реЗ: tools рдХреГрддреА рдХрд░рддрд╛рдд, рдореНрд╣рдгреВрди tools рдирд╛ guardrails рдорд┐рд│рддрд╛рдд (L05); resources рд╡рд╛рдЪрддрд╛рдд, рдореНрд╣рдгреВрди рддреНрдпрд╛рдВрдЪреА privacy review рд╣реЛрддреЗ.

ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛

python3 client/mini_client.py    # part 2 prints the tools shelf

рддреАрди tool рд╡рд░реНрдгрдиреЗ рдореЛрдареНрдпрд╛рдиреЗ рд╡рд╛рдЪрд╛. рдордЧ рдХрд╛рдЧрджрд╛рд╡рд░, рдЖрдкрд▓реНрдпрд╛ school server рдЪреА рдиреАрдЯ рднрд░рд▓реЗрд▓реА рд░рдЪрдирд╛ рдХрд░рд╛: рдпрд╛рдВрдкреИрдХреА рдХреЛрдгрддреЗ рдХреЛрдгрддреНрдпрд╛ рдХрдкреНрдкреНрдпрд╛рд╡рд░ рдЬрд╛рддреЗ? 3A рдЪреЗ grade report card (resource тАФ app рддреЗ рдЬреЛрдбрддреЗ), "grades рдмрджреНрджрд▓ рдкрд╛рд▓рдХрд╛рдВрдирд╛ email рд▓рд┐рд╣рд╛" template (prompt тАФ user рддреЗ рдирд┐рд╡рдбрддреЛ), add_homework (tool тАФ model рдХреГрддреА рдХрд░рддреЛ, host рдЦрд╛рддреНрд░реА рдХрд░рддреЛ). рдЖрддрд╛ school_server.py рдЪреА TOOLS рдпрд╛рджреА рддрдкрд╛рд╕рд╛ тАФ рддреА рд╡рд╛рдврд╡рд▓реА рддрд░ resources/list рдореНрд╣рдгреВрди рддреБрдореНрд╣реА рдХрд╛рдп рдЬреЛрдбрд╛рд▓? (рдзрдбрд╛ 06 рддреБрдореНрд╣рд╛рд▓рд╛ рд╣реЗ рдХрд░реВрди рджрд╛рдЦрд╡рд╛рдпрдЪреЗ рдЖрд╡реНрд╣рд╛рди рджреЗрддреЛ.)

тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ

Scripted run рдЪрд╛ рднрд╛рдЧ 2 рддреНрдпрд╛рдВрдЪреНрдпрд╛ рд╡рд░реНрдгрдирд╛рдВрд╕рд╣ рдиреЗрдордХреЗ рддреАрди tools рджрд╛рдЦрд╡рддреЛ; рднрд╛рдЧ 1 (server/discover) рдиреЗ stocks: tools рд╕рд╛рдВрдЧрд┐рддрд▓реЗ тАФ resources рдХрд┐рдВрд╡рд╛ prompts рдирд╛рд╣реАрдд, server рдЪреНрдпрд╛ capabilities рд╢реА рдЬреБрд│рдгрд╛рд░реЗ.

ЁЯПБ рддреБрдореНрд╣реА рдЖрддреНрддрд╛рдЪ рдХрд╛рдп рд╕рд┐рджреНрдз рдХреЗрд▓реЗ

рдХреЛрдг рдард░рд╡рддреЛ рдпрд╛рд╡рд░реВрди рддреБрдореНрд╣реА рдХреЛрдгрддреНрдпрд╛рд╣реА рдХреНрд╖рдорддреЗрдЪреЗ рд╡рд░реНрдЧреАрдХрд░рдг рдХрд░реВ рд╢рдХрддрд╛ тАФ model тЖТ tool, app тЖТ resource, user тЖТ prompt тАФ рдЖрдгрд┐ рдХрд╛рд╣реАрд╣реА call рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА server рдЪреЗ рдХрдкреНрдкреЗ рддреНрдпрд╛рдЪреНрдпрд╛ capabilities рд╡рд░реВрди рд╡рд╛рдЪреВ рд╢рдХрддрд╛.

тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛

ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ: рдзрд╛рд░рджрд╛рд░ рд╡рд░реНрдгрдиреЗ рдЖрдгрд┐ рд╕рдореГрджреНрдз inputSchema (enums, required fields) рдЕрд╕рд▓реЗрд▓реЗ servers рдмрд░реЛрдмрд░ call рд╣реЛрддрд╛рдд; model рд▓рд╛ рджрд┐рд╢рд╛ рджреЗрдгреНрдпрд╛рдЪрд╛ рд╣рд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА prompt engineering рдкреЗрдХреНрд╖рд╛ рд╕реНрд╡рд╕реНрдд рдорд╛рд░реНрдЧ рдЖрд╣реЗ. рд░рдЪрдиреЗрдЪрд╛ рд╡реЗрд│ plumbing рд╡рд░ рдирд╡реНрд╣реЗ, рдХрдкреНрдкреНрдпрд╛рд╡рд░ рдЦрд░реНрдЪ рдХрд░рд╛.

тПня╕П рдкреБрдвреЗ

рдЖрддрд╛ рдЦрд░реЗ bytes рд╡рд╛рдЪрд╛рдпрдЪреА рд╡реЗрд│: badge, discovery рдЖрдгрд┐ calls тАФ wire, рдПрдХрд╛ sequence рдЖрдХреГрддреАрдЪреНрдпрд╛ рд░реВрдкрд╛рдд рдЬреА рддреБрдореНрд╣реА рдХрд╛рдпрдо рдУрд│рдЦрд╛рд▓.

git checkout lesson-04-the-wire

ЁЯз░ Lesson 03 тАФ The three primitives: tools, resources, prompts

ЁЯУН You are here: Lesson 03 of 8 ┬╖ Previous: lesson-02-architecture ┬╖ Next: lesson-04-the-wire


ЁЯУж What's in this branch

Lessons 01тАУ02, plus the three kinds of things a server can offer тАФ and who gets to decide when each is used.

ЁЯзТ Explain like I'm 5

An instrument announces its offerings on three labeled shelves:

  1. ЁЯз░ Tools тАФ "things I can DO for the student." Actions with inputs: lookup_grade(student), query_db(sql), send_email(...). The MODEL decides when to call them (with the host's permission тАФ L02!). This is the shelf 90% of today's servers lead with, and the only one our school server stocks.
  2. ЁЯУБ Resources тАФ "things you may READ from me." Context with addresses: a file, a database record, a log. The HOST/APP decides what to attach to the desk (AI course L08) тАФ like the teacher choosing which handouts go on the student's desk before class.
  3. ЁЯУЬ Prompts тАФ "recipes I suggest." Pre-written prompt templates the server ships: "summarize a ticket like THIS". The USER picks them (slash-commands, menu items) тАФ like worksheets the instrument's manufacturer includes in the box.

One decision each: modelтЖТtools, appтЖТresources, userтЖТprompts. That's the whole taxonomy тАФ say it twice and you know more MCP than most people shipping servers. ЁЯШД

ЁЯЧ║я╕П Diagram

flowchart TB
    subgraph server["ЁЯФм what a server offers"]
        tools["ЁЯз░ TOOLS - actions with inputs<br/>lookup_grade ┬╖ add_homework"]
        res["ЁЯУБ RESOURCES - readable context<br/>file://report.pdf ┬╖ db://students/3A"]
        prompts["ЁЯУЬ PROMPTS - suggested recipes<br/>'/summarize-ticket'"]
    end
    m["ЁЯза model decides<br/>(host permitting)"]
    a["ЁЯПл app decides<br/>what's on the desk"]
    u["ЁЯзС user picks<br/>from a menu"]
    tools --- m
    res --- a
    prompts --- u

тЭУ What

Who initiates, who consumes тАФ one table for the three shelves:

Shelf Who initiates Who consumes Wire verbs
ЁЯз░ tools the model proposes (host permitting) the model тАФ result тЖТ desk tools/list, tools/call
ЁЯУБ resources the host/app attaches the model тАФ context on the desk resources/list, resources/read
ЁЯУЬ prompts the user picks (menu, slash-command) the model / the app prompts/list, prompts/get

ЁЯдФ Why

Teams misdesign servers by shoving everything into tools ("read_file as a tool!" тАФ sometimes right, but if the APP should control context, it's a resource). Knowing WHO decides per shelf тАФ model/app/user тАФ is the design compass. It's also a security compass: tools act, so tools get the guardrails (L05); resources read, so they get the privacy review.

ЁЯзк Try it

python3 client/mini_client.py    # part 2 prints the tools shelf

Read the three tool descriptions aloud. Then, on paper, redesign our school server properly stocked: which of these belong on which shelf? grade report card for 3A (resource тАФ the app attaches it), "write a parent email about grades" template (prompt тАФ the user picks it), add_homework (tool тАФ the model acts, host confirms). Now check school_server.py's TOOLS list тАФ what would you add as resources/list if you extended it? (Lesson 06 dares you to.)

тЬЕ Verify тАФ what you should see

Part 2 of the scripted run lists exactly three tools with their descriptions; part 1 (server/discover) reported stocks: tools тАФ no resources or prompts, matching the server's capabilities.

ЁЯПБ What you just proved

You can classify any capability by who decides тАФ model тЖТ tool, app тЖТ resource, user тЖТ prompt тАФ and read a server's shelves from its capabilities before calling anything.

тЪая╕П Common mistakes

ЁЯПн Why this matters in production: servers with sharp descriptions and rich inputSchema (enums, required fields) get called correctly; that is cheaper model-steering than any prompt engineering. Spend design time on the shelf, not the plumbing.

тПня╕П Next

Time to read the actual bytes: the badge, discovery and calls тАФ the wire, as a sequence diagram you'll recognize forever.

git checkout lesson-04-the-wire
тЖР PreviousarchitectureNext тЖТthe wire

This page is the lesson's README from the lesson-03-primitives branch, shown here so the whole School stays on one site. Code files open on GitHub at the same branch.