spinny:~/writing $ less mcp-model-context-protocol-guide.md
12Το **Model Context Protocol (MCP)** είναι ένα ανοιχτό πρότυπο που δημιουργήθηκε από την Anthropic και ορίζει πώς τα μοντέλα AI επικοινωνούν με εξωτερικά εργαλεία, πηγές δεδομένων και υπηρεσίες. Σκεφτείτε το ως το "USB-C της AI" - ένα καθολικό βύσμα που επιτρέπει σε οποιονδήποτε AI agent να μιλήσει με οποιοδήποτε εργαλείο μέσω μιας τυποποιημένης διεπαφής.34Από την κυκλοφορία του, το MCP έχει ξεπεράσει τα **97 εκατομμύρια μηνιαίες λήψεις SDK** και έχει υιοθετηθεί από κάθε μεγάλο πάροχο AI: Anthropic, OpenAI, Google, Microsoft και Amazon. Σε αυτόν τον οδηγό, θα εξερευνήσουμε όλα όσα χρειάζεται να γνωρίζετε για να χτίσετε με MCP.56## Γιατί Υπάρχει το MCP78Πριν το MCP, κάθε εφαρμογή AI έπρεπε να χτίσει προσαρμοσμένες ενσωματώσεις για κάθε εργαλείο που ήθελε να χρησιμοποιήσει. Θέλετε η AI σας να διαβάζει αρχεία; Γράψτε προσαρμοσμένο κώδικα. Ερώτημα σε βάση δεδομένων; Περισσότερος προσαρμοσμένος κώδικας. Δημοσίευση στο Slack; Ακόμα μία ενσωμάτωση.910Αυτό δημιούργησε ένα **πρόβλημα N×M**: N εφαρμογές AI που η κάθε μία χρειαζόταν M προσαρμοσμένες ενσωματώσεις, οδηγώντας σε διπλή προσπάθεια και κατακερματισμένα οικοσυστήματα.1112```mermaid13graph TD14 subgraph "Before MCP (N×M)"15 A1[AI App 1] --> T1[GitHub Integration]16 A1 --> T2[Slack Integration]17 A1 --> T3[DB Integration]18 A2[AI App 2] --> T4[GitHub Integration]19 A2 --> T5[Slack Integration]20 A2 --> T6[DB Integration]21 end22```2324Το MCP λύνει αυτό με **ένα μόνο πρωτόκολλο** που οποιοσδήποτε AI client μπορεί να χρησιμοποιήσει για να επικοινωνήσει με οποιονδήποτε MCP server:2526```mermaid27graph TD28 subgraph "With MCP (N+M)"29 A1[AI App 1] --> MCP[MCP Protocol]30 A2[AI App 2] --> MCP31 MCP --> S1[GitHub Server]32 MCP --> S2[Slack Server]33 MCP --> S3[DB Server]34 end35```3637## Βασικές Έννοιες3839Το MCP έχει τρία θεμελιώδη primitives:4041### 1. Εργαλεία (Tools)42Τα εργαλεία είναι συναρτήσεις που η AI μπορεί να καλέσει. Αντιπροσωπεύουν ενέργειες όπως "δημιούργησε ένα αρχείο", "ρώτησε μια βάση δεδομένων" ή "στείλε ένα μήνυμα". Κάθε εργαλείο έχει όνομα, περιγραφή και JSON Schema για τις παραμέτρους του.4344```typescript45{46 name: "create_issue",47 description: "Create a new GitHub issue",48 inputSchema: {49 type: "object",50 properties: {51 title: { type: "string", description: "Issue title" },52 body: { type: "string", description: "Issue body" },53 repo: { type: "string", description: "Repository name" }54 },55 required: ["title", "repo"]56 }57}58```5960### 2. Πόροι (Resources)61Οι πόροι είναι δεδομένα που η AI μπορεί να διαβάσει. Αντιπροσωπεύουν αρχεία, εγγραφές βάσεων δεδομένων, απαντήσεις API ή οποιαδήποτε άλλη πηγή δεδομένων. Οι πόροι αναγνωρίζονται μέσω URIs.6263```typescript64{65 uri: "file:///Users/dev/project/README.md",66 name: "Project README",67 mimeType: "text/markdown"68}69```7071### 3. Prompts72Τα prompts είναι επαναχρησιμοποιήσιμα πρότυπα που βοηθούν στη δόμηση αλληλεπιδράσεων. Μπορούν να περιλαμβάνουν δυναμικές παραμέτρους και είναι χρήσιμα για την τυποποίηση κοινών ροών εργασίας.7374```typescript75{76 name: "code_review",77 description: "Review code changes for quality and security",78 arguments: [79 { name: "diff", description: "The code diff to review", required: true }80 ]81}82```8384## Αρχιτεκτονική8586Το MCP ακολουθεί αρχιτεκτονική client-server:8788```mermaid89graph LR90 subgraph "Host Application"91 Client[MCP Client]92 end9394 subgraph "MCP Server"95 Server[Server Process]96 Server --> Tools[Tools]97 Server --> Resources[Resources]98 Server --> Prompts[Prompts]99 end100101 Client -- "JSON-RPC 2.0\n(stdio or SSE)" --> Server102```103104- **Host**: Η εφαρμογή AI (Claude Desktop, Cursor, η δική σας εφαρμογή)105- **Client**: Διατηρεί σύνδεση 1:1 με έναν MCP server106- **Server**: Εκθέτει εργαλεία, πόρους και prompts στον client107- **Transport**: Η επικοινωνία γίνεται μέσω JSON-RPC 2.0 πάνω από stdio (τοπικά) ή Server-Sent Events (απομακρυσμένα)108109## Δημιουργία MCP Server110111Ας χτίσουμε έναν πρακτικό MCP server που αλληλεπιδρά με μια λίστα εργασιών αποθηκευμένη σε αρχείο JSON.112113### Εγκατάσταση114115```bash116mkdir mcp-todo-server && cd mcp-todo-server117npm init -y118npm install @modelcontextprotocol/sdk zod119```120121### Υλοποίηση Server122123```typescript124// src/index.ts125import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";126import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";127import { z } from "zod";128import fs from "fs";129130const TODO_FILE = "./todos.json";131132function readTodos(): { id: number; text: string; done: boolean }[] {133 if (!fs.existsSync(TODO_FILE)) return [];134 return JSON.parse(fs.readFileSync(TODO_FILE, "utf-8"));135}136137function writeTodos(todos: { id: number; text: string; done: boolean }[]) {138 fs.writeFileSync(TODO_FILE, JSON.stringify(todos, null, 2));139}140141const server = new McpServer({142 name: "todo-server",143 version: "1.0.0",144});145146// Tool: Add a todo147server.tool(148 "add_todo",149 "Add a new todo item",150 { text: z.string().describe("The todo text") },151 async ({ text }) => {152 const todos = readTodos();153 const newTodo = { id: Date.now(), text, done: false };154 todos.push(newTodo);155 writeTodos(todos);156 return { content: [{ type: "text", text: `Added: "${text}"` }] };157 }158);159160// Tool: List todos161server.tool(162 "list_todos",163 "List all todo items",164 {},165 async () => {166 const todos = readTodos();167 const list = todos168 .map((t) => `${t.done ? "✅" : "⬜"} [${t.id}] ${t.text}`)169 .join("\n");170 return { content: [{ type: "text", text: list || "No todos yet." }] };171 }172);173174// Tool: Complete a todo175server.tool(176 "complete_todo",177 "Mark a todo as completed",178 { id: z.number().describe("The todo ID to complete") },179 async ({ id }) => {180 const todos = readTodos();181 const todo = todos.find((t) => t.id === id);182 if (!todo) return { content: [{ type: "text", text: "Todo not found." }] };183 todo.done = true;184 writeTodos(todos);185 return { content: [{ type: "text", text: `Completed: "${todo.text}"` }] };186 }187);188189// Resource: Current todos as a readable resource190server.resource(191 "todos://list",192 "Current todo list",193 async () => ({194 contents: [{195 uri: "todos://list",196 mimeType: "application/json",197 text: JSON.stringify(readTodos(), null, 2),198 }],199 })200);201202// Start the server203const transport = new StdioServerTransport();204await server.connect(transport);205```206207### Ρύθμιση208209Για να χρησιμοποιήσετε αυτόν τον server με το Claude Desktop, προσθέστε τον στη ρύθμιση:210211```json212{213 "mcpServers": {214 "todo": {215 "command": "npx",216 "args": ["tsx", "/path/to/mcp-todo-server/src/index.ts"]217 }218 }219}220```221222## Δημιουργία MCP Client223224Μπορείτε επίσης να χτίσετε έναν προσαρμοσμένο client που συνδέεται με οποιονδήποτε MCP server:225226```typescript227import { Client } from "@modelcontextprotocol/sdk/client/index.js";228import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";229230const transport = new StdioClientTransport({231 command: "npx",232 args: ["tsx", "./src/index.ts"],233});234235const client = new Client({ name: "my-client", version: "1.0.0" });236await client.connect(transport);237238// List available tools239const { tools } = await client.listTools();240console.log("Available tools:", tools.map((t) => t.name));241242// Call a tool243const result = await client.callTool({244 name: "add_todo",245 arguments: { text: "Write MCP blog post" },246});247console.log(result);248```249250## Δημοφιλείς MCP Servers251252Το οικοσύστημα MCP έχει αναπτυχθεί ραγδαία. Εδώ είναι μερικοί από τους πιο δημοφιλείς servers:253254| Server | Περιγραφή | Περίπτωση Χρήσης |255|--------|-----------|-----------------|256| **GitHub** | Δημιουργία issues, PRs, διαχείριση repos | Ροές εργασίας ανάπτυξης |257| **Slack** | Αποστολή μηνυμάτων, διαχείριση καναλιών | Επικοινωνία ομάδας |258| **PostgreSQL** | Ερωτήματα και διαχείριση βάσεων δεδομένων | Πρόσβαση δεδομένων |259| **Filesystem** | Ανάγνωση, εγγραφή και αναζήτηση αρχείων | Τοπική ανάπτυξη |260| **Puppeteer** | Αυτοματοποίηση browser και scraping | Δοκιμές web |261| **Sentry** | Παρακολούθηση σφαλμάτων και debugging | Υποστήριξη παραγωγής |262| **Supabase** | Βάση δεδομένων, auth, αποθήκευση | Backend λειτουργίες |263264## MCP εναντίον A2A (Agent-to-Agent)265266Ενώ το MCP χειρίζεται την επικοινωνία **agent-εργαλείο**, το πρωτόκολλο **A2A (Agent-to-Agent)** της Google χειρίζεται την επικοινωνία **agent-agent**. Είναι συμπληρωματικά:267268```mermaid269graph TD270 Agent1[Agent 1] -- "A2A Protocol" --> Agent2[Agent 2]271 Agent1 -- "MCP Protocol" --> Tool1[GitHub MCP Server]272 Agent2 -- "MCP Protocol" --> Tool2[Database MCP Server]273```274275- **MCP**: Πώς ένας AI agent χρησιμοποιεί εργαλεία (κάθετη ενσωμάτωση)276- **A2A**: Πώς οι AI agents συνεργάζονται μεταξύ τους (οριζόντια ενσωμάτωση)277278## Βέλτιστες Πρακτικές2792801. **Κρατήστε τους servers εστιασμένους**: Ένας server ανά τομέα (server GitHub, server Slack, κλπ.). Μη χτίζετε μονολιθικούς servers.2812. **Επικυρώστε εισόδους με Zod**: Πάντα επικυρώνετε τις εισόδους εργαλείων με σωστά schemas.2823. **Χειριστείτε τα σφάλματα κομψά**: Επιστρέψτε ουσιαστικά μηνύματα σφάλματος, όχι stack traces.2834. **Χρησιμοποιήστε πόρους για δεδομένα μόνο ανάγνωσης**: Αν η AI χρειάζεται μόνο να διαβάσει δεδομένα, εκθέστε τα ως πόρο αντί για εργαλείο.2845. **Προσθέστε κατάλληλες περιγραφές**: Καλές περιγραφές εργαλείων και παραμέτρων βοηθούν την AI να κατανοήσει πότε και πώς να χρησιμοποιήσει κάθε εργαλείο.2856. **Δοκιμάστε με το MCP Inspector**: Χρησιμοποιήστε `npx @modelcontextprotocol/inspector` για να δοκιμάσετε τον server σας διαδραστικά.286287## Ξεκινώντας288289```bash290# Create a new MCP server from template291npx @modelcontextprotocol/create-server my-server292293# Test with the MCP Inspector294npx @modelcontextprotocol/inspector npx tsx ./src/index.ts295```296297## Συμπέρασμα298299Το MCP έχει γίνει το de facto πρότυπο για τη χρήση εργαλείων AI το 2026. Είτε χτίζετε προσαρμοσμένους AI agents, επεκτείνετε το Claude Code ή δημιουργείτε ενσωματώσεις για υπάρχουσες πλατφόρμες, η κατανόηση του MCP είναι απαραίτητη. Το πρωτόκολλο είναι αρκετά απλό για να μαθευτεί σε ένα απόγευμα αλλά αρκετά ισχυρό για να χτίσει ροές εργασίας AI επιπέδου παραγωγής.300301**Επόμενα βήματα:**302- Εξερευνήστε την [Προδιαγραφή MCP](https://spec.modelcontextprotocol.io/)303- Περιηγηθείτε στους [υπάρχοντες MCP servers](https://github.com/modelcontextprotocol/servers) για έμπνευση304- Χτίστε τον πρώτο σας server με το TypeScript ή Python SDK305- Δοκιμάστε τον με το Claude Desktop ή το MCP Inspector306
:MCP (Model Context Protocol): Ο Πλήρης Οδηγός για Προγραμματιστέςlines 1-306 (END) — press q to close