MCP на прыкладзе: асістэнт PostgreSQL на натуральнай мове для Claude
MCP праз праект: як Model Context Protocol ператварае N × M інтэграцый у N + M, а потым — сервер PostgreSQL толькі для чытання, да якога звяртаецца Claude Desktop.
Крыніцы: MCP Explained: The Protocol That Finally Gives AI a Standard Way to Talk to the World
Проблема «клейкага» коду
У певны момент кожны распрацоўшчык, які ствараець продукты на базе ШЫ, сталкаецца з той самым працою. Мадэль ўстойчыва, а корысныя даны знаходзяцца ў базе дадзеных, сістэме файлаў чы яком-небудзь API. Адсутня чыстая, стандартызаваная способа з’едыніць гэтыя два элементы.
Тады пачынаецца «клейкі» код: адаптар тут, нестабільны кэйс там. Ён працуе, пакуль не змянюецца мадэль, не з’яўляецца другы істочнік дадзеных чы пакуль новы колега не павінен будзе перэробіць усю структуру взаімадзеяння.
Адпаведзь Anthropic прыйшла у лістападзе 2024 года у вобразе Model Context Protocol (MCP). За прыблізна два гады ён пераўсёліўся з нішовага експерымента ў стандартную інфраструктуру агентаў: да серэдзіны 2026 года ў месяц завантажалі 97 мільйонаў SDK, а ў офіцыяным рэестры было майжэ 10 000 актыўных публічных сервераў.
Разглянем продукт, у якому корыстувачы ставяць запітанні пра даныя компаніі простай англійскай мовай. Ідэя простая, але рэалізацыя складная. Сістэма должна распазнаваць запітанне, ператвараць яго на запіт да базы дадзеных, выконваць яго, вяртаць рэзультаты модэлю і сформатаваць адпаведную адпаведзь. Якшча дадзіць увагу кожнаму з інструментаў, з якімі павінна працаваць ШЫ — календару, рэпазітарыю на GitHub чы рабочай прастору у Slack — кожны з іх стае окрэмай інтэграцыяй з сваімі фарматамі API, працэсамі аўтэнтыфікацыі і фарматамі адзінакоў.
Дзеякіі інжынеры такі стан называюць «інтэграцыяй у стыле спагеты». Якшо модэляў будзе N, а інструментаў — M, кожна пара выклікае неабходнасць стварэння сабеіндыго коду. Даўжынюючы ліст модэляў, кожны інструмент трэба перэрабляць, а дадзінны інструмент значыць неабходнасць апдэйту інтэграцыі кожнага модэля.
Што такое MCP
MCP — гэта адаптаваны стандарт, адаптаваны на базе JSON-RPC 2.0, які забезпечвае мадэлям адзінны спакаваны слоўнік для выходу на званыя засобы і даны. Колькасць элементаў у фармаце N × M скарочваецца да N + M, адколі адны сервер можа служыць будзь-каму з кліентаў, якія выкарыстоўваюць гэты протакол.
Найпопулярнейшая аналагія — USB-C. Раней зараднікі для ноутбукав, тэлефонаў, камер і наушнікаў разлічваліся, кожны выкарыстоўваў свой кабель. USB-C змяніў сам канектар, але не сістэму электрычнасці, і цяпер адны кабель падходзіць для всіх. MCP выпольвае тую ж ролю для ШЫ: мадэль, якая выкарыстоўвае гэты протакол, можа выходзіць на будзь-які засоб, які яго падтрымлівае, таму сервер, напісаны раз, можа працаваць з кожной сумесной модэллю.
Управленне прымела 2026 год у якісці перыяда. У грудзені 2025 года Anthropic перадала MCP фундацыі Agentic AI Foundation — спецыяльнаму фонду ў складзе Linux Foundation, які быў створаны саюзам Anthropic, Block і OpenAI, — што парадзіла, што гэты протакол больш не належыць выключна Anthropic. З’явілася і падтрымка з боку громадскасці: керуючы дырэктар OpenAI падтрымаў гэты протакол і аанунсаваў падтрымку праз SDK для агентаў і ChatGPT, а Google DeepMind за калькі дзён паўтарыла, што Gemini будзе вікорыстоўваць MCP для сваіх інструментаў. Чэрэз гэта протакол стаў стандартным спосабам перадачы даных і вызываў служб з модэляў да зовнішніх інструментаў.
Тры часткі
Хост — гэта прыкладнэц, з якім фактычна працюе корыстнік: Claude Desktop, пашырэнне для VS Code або внутрашні чатбот.
Кліент MCP знаходзіцца ў самай машыне-хазяйцы. Ён падтрымвае відкіятыя з’ўязкі з аднім або калькама сервераў MCP і направляе паведамленні між модэлем і гэтымі серверамі, тады калі модэль вырашае вызваць інструмент, кліент перадае запіт.
Сервер MCP — гэта месца, дзе знаходзяцца можлівасці. Кожны сервер абгортае інструмент або крыніцы дадзэння праз стандартны інтэрфейс і можа запрошваць тры відэры рэчаў:
- Інструменты — гэта функцыі, якія можна вызваць, такія як
run_sql_query,search_webабоsend_email. Модэль выкарыстоўвае іх, каб выконаць дзеянне аб з’явіць дадзеныя. - Рэсурсы — гэта чытальныя дадзеныя, такія як файлы, радкі базы дадзэння аб дакументы, якія модэль можа запрашваць у свае вікна кантэксту.
- Шаблоны запытаў — гэта шаблоны запытаў, якія можна перызнаць, і якія сервер перадае машыне-хазяйцы.
Паведамленні кодуюцца як JSON-RPC 2.0 і перавозяцца па аднам з двух спосабоў перадачы дадзенняў. stdio падходзіць для сервера, які працуе як локальны працэс на камп’ютарэ кліента. Streamable HTTP назначаны для даўнях сервераў і рэштараванняў у воблаку, выкарыстоўваючы звычныя HTTP-запыты, а за неабходнасці — Server-Sent Events (SSE) для стрымавых адпаведзей і паведамленняў з сервера да кліента. З-за такога раздзелу адні пратаколы пакрываюць як локальную розработку, так і сістэмы праўернага масштабу.
Адна запытанне, па шагах
Ось што адбываецца між тым, калі корыстувач піша запытанне, і тым, калі ён атрымлеў адпаведзь.
- Корыстувач запытае: «Сколькі замовэнняў мы атрымалі ў пярэдній тыдзень?»
- Мадэль бачыць запытанне пад спісам доступных інструментаў, якія былі запрашаны з сервера MCP пад час запуску.
- Яна вырашае, што патрэбна функцыя
query_database, і выдае структураваны запыт да інструмента. - Кліент MCP перэхопляе запыт і адправляе яго да правільнага сервера.
- Сервер выкананае запыт і вяртае рэзультат у фармаце JSON.
- Мадэль чытае гэты рэзультат і пішае адказ на простай мове.
Мадэль ніколі не касаецца самай базы дадзеных, і ёй не трэба сустроек з’яўлення загадзя, таму што сервер MCP адмаўляецца за ўсё гэта.
Праект: інтэрфейс чату для PostgreSQL
Калі не браліць увагу тэорыю, то ўсё гэта ёсць конкрэтна. Команда зберагае свае даны замовленняў у PostgreSQL, а колегі, якія не ўмеюць працаваць з тэхнікай, постаўляюць запытанні ў аднаго чалавека, які ведае SQL, каб той падготавіў справаздачы. Мета — стварыць інтэрфейс чату, дзе ўсі могу задаваць запытанні на простай англійскай мове і атрымляць адказы на жывую без неабходнасці пісаць SQL-код.
План — адміністратыўны сервер MCP пры базе дадзенаў PostgreSQL, які прысвячаее адзін інструмент query_database і падключаецца да Claude. Кожны з членаў команды можа тады задаць запыт на звычайнай мове і атрымаць рэальныя даны.
Настройка
Пачніце з новага папкі праекта і установіце неабходныя залежнасці.
mkdir nl-db-assistant
cd nl-db-assistant
npm init -y
npm install @modelcontextprotocol/sdk pg dotenv zod
Пакеты дзельняць работу. @modelcontextprotocol/sdk — гэта афіцыйны кіт Anthropic для JavaScript і TypeScript для сервераў MCP, pg — стандартны кліент Node.js да базы дадзеных PostgreSQL, а dotenv не дазволяе даным прыўязкі да базы дадзеных паставіцца ў код выканання. zod пераканальвае схемы пад час выканання, і MCP выкарыстоўвае яго для стварэння схемы JSON, за дапамогай якой мадэль выучаецца, як вызываць інструменты.
Створыце файл .env у корані праекта, у яком будзе знаходзіцца стрынг з’яўлення.
DATABASE_URL=postgresql://your_user:your_password@localhost:5432/your_database
Негайнаа дадзіце .env у .gitignore, таму што даныя прынтэзаў ніколі не павінны быць зафіксаваныя.
Шасцяравая структура сервера
Далей ідзе server.js, які пачынаецца з імпортаў, назвы і версіі сервера, а таксама з басэну базы дадзеных.
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
import pg from "pg";
import dotenv from "dotenv";
dotenv.config();
// Set up the PostgreSQL connection pool
const pool = new pg.Pool({
connectionString: process.env.DATABASE_URL,
});
// Create the MCP server instance
const server = new McpServer({
name: "postgres-assistant",
version: "1.0.0",
});
Назва і версія адаптаваныя прадаюцца кліенту пад час перагавораў пра можлівасці калі ён падключаецца. База падключэння ствараецца адначас і вікорыстоўваецца для кожнага запіту, што ў дзесяткі разоў эфектывней, чым адкрываць новае падключэння ў кожны раз.
Адкрыванне схемы
Каб модэль могла ствараць корыстныя запіты, яна должна ведаць, якія табелі і столбцы існуюць. Актуальная схема адкрываецца як чытальны рэсурс MCP, які можна выкарыстоўваць у кантэксце.
server.resource(
"database-schema",
"schema://main",
async (uri) => {
const result = await pool.query(`
SELECT
table_name,
column_name,
data_type
FROM information_schema.columns
WHERE table_schema = 'public'
ORDER BY table_name, ordinal_position
`);
const schema = result.rows.reduce((acc, row) => {
if (!acc[row.table_name]) acc[row.table_name] = [];
acc[row.table_name].push(`${row.column_name} (${row.data_type})`);
return acc;
}, {});
const schemaText = Object.entries(schema)
.map(([table, cols]) => `${table}:\n ${cols.join("\n ")}`)
.join("\n\n");
return {
contents: [{
uri: uri.href,
text: schemaText,
}],
};
}
);
information_schema.columns — гэта вбудованы праграма PostgreSQL, якая апісвае кожную табліцу і столбец. Код запытае яе, перакладае радкі ў чытальны тэкст і вяртае гэты тэкст як рэсурс. Модэль чытае гэты рэсурс перш чым адлучыць, як склаць запыт, таму ён мае полную структуру і не мусіць здагадвацца пра правільны SQL.
Інструмент запытаў
Гэта сэрца сервера — інструмент, які модэль выкарыстоўвае для выканання SQL запытаў проты базы дадзенаў.
server.tool(
"query_database",
"Run a read-only SQL query against the PostgreSQL database. Use this to answer questions about data, counts, trends, or summaries.",
{
sql: z.string().describe(
"A valid PostgreSQL SELECT query. Only SELECT statements are allowed."
),
},
async ({ sql }) => {
// Safety gate: only allow SELECT statements
const trimmed = sql.trim().toUpperCase();
if (!trimmed.startsWith("SELECT")) {
return {
content: [{
type: "text",
text: "Error: only SELECT queries are permitted through this interface.",
}],
isError: true,
};
}
try {
const result = await pool.query(sql);
const output = JSON.stringify(result.rows, null, 2);
return {
content: [{
type: "text",
text: `Query returned ${result.rowCount} row(s):\n\n${output}`,
}],
};
} catch (err) {
return {
content: [{
type: "text",
text: `Query failed: ${err.message}`,
}],
isError: true,
};
}
}
);
Шчыразь прыглядзіцеся да строкі з апісаннем, другаму аргументу, калі ўжо ўсё-такі, таму што модэль чытае яго, калі вырашае, чы і як вікорыстоўваць інструмент. Напісці яго трэба як інструкцыі для аптальнага стажыста, які ніколі не бачыў базы дадзенаў. Схема Zod для параметра sql аўтаматычна ператвараецца на схему JSON, якую бачыць модэль, і якая паказвае фармат аргумента. Захіст на пачатку прымае толькі запыты SELECT, таму жадныя запыты на збір дадзенаў не праходзяць ні навмысна, ні па адхылэнні.
Запуск сервера
У падсумку сервер запускаецца праз транспорт stdio.
const transport = new StdioServerTransport();
await server.connect(transport);
console.error("PostgreSQL MCP server is running");
За дапамою stdio кліент MCP запускае скрыпт як дзецінскі процэс і ведае з яным праз стандартны ввод і вывод. Гэта самы просты і надзеяны спосаб для локальнага развіцця. У рэчы прыемліваеся вікорыстоўванне console.error, каб яна не паспелаўвала канал stdout, які MCP выкарыстоўвае для протакольных паведамленняў.
Падключэнне Claude Desktop
Ачыніце файл налашоўкаў Claude Desktop. У macOS ён знаходзіцца тут:
~/Library/Application Support/Claude/claude_desktop_config.json
У Windows шлях выглядае так:
%APPDATA%\Claude\claude_desktop_config.json
Дадзіце ентры для новага сервера:
{
"mcpServers": {
"postgres-assistant": {
"command": "node",
"args": ["/absolute/path/to/nl-db-assistant/server.js"]
}
}
}
Пачаткайце занова Claude Desktop, і на інтэрфейсе з’явіцца маленькій айкант з інструментамі, які паказвае, што серверы MCP з’яўлены і гатовы да работы.
Пробаўце самі
Можна выкарыстоўваць звычныя фразы: сколькі замовэнняяўся за пяць дзён, якая катэгорыя продуктав прынесла найбольшыя доходы за месцы, або хто ў топе пяці найбольшых кліентаў за загальной вялічынай замовэнняў.
Claude чытае актуальны рэсурс шымату, пішае адпаведны SQL-запыт, вызывае query_database, прымеўае рэзультаты і ператварае іх у чыстае адпаведзенне. Нетэхнічныя колегі ніколі не бачаць запыту, толькі запытанне і адпаведзенне.
Прыблызна 80 ліній коду на JavaScript ствараюць сервер, які паказвае будзь-яму падключанаму модэлю жывую схему PostgreSQL, перакладае запытанні на натуральнай мове ў SQL, забезпечвае толькі чытальны доступ і вяртае структураваны выхід, які модэль можа падсумаваць. Ён быў напісаны раз, і будзь-яя модэль, сумесная з MCP — чы то Claude сёньня, чы іншая завтра — можа яе вікорыстоўваць без жадных змян у серверэ. Гэта і ёсць перавага спакульнага пратаколу.
Колькасць вікорыстання
Шырэнне ў вікорыстанні было стрэмным. Колькасць месячных завантажэнняў SDK зросла з 100 000 пасля запуску да 97 мільйонаў да марца 2026 года, тыяму ў 970 разоў больш за 18 месяцаў. У працоўнасці з пакетам npm ад React, на протыяжэнні, знадобілася прыблызна тры гады, каб досягнуць 100 мільйонаў месячных завантажэнняў.
У прынцыповай працы выкорыстоўваюцца Block, Bloomberg, Amazon і сотні компаній з спісу Fortune 500. У красавіку 2026 года Pinterest апісала свою структуру MCP для прынцыповай працы: серверы, прызначаныя для конкрэтных задач, для Presto, Spark і Airflow, пры чым людзі апраўляюць чутлівыя операцыі. Па дааным, або 66 000 вызоў інструментаў на месцы ад 844 актыўных корыстуначаў дапамагаюць заўсёды заўсходзіць прыблізна 7 000 гадзін працы інжынераў на месцы.
Сэрьбісы MCP, якія падтрымваюцца афіцыйна або спільнайянкамі, заўсёды існуюць для Slack, GitHub, Google, Salesforce і Stripe, а таксама для HubSpot, Shopify, Notion, Linear, Sentry, Figma, Webflow, Cloudflare і Postman.
Галоўная тэма плану на 2026 год — гатовасць падпрыемстваў. Ключовыя элементы — аутэнізацыя за дапамогою OAuth 2.1, якая прыўязана да падпрыемствовых прадаўцоў ідэнтычнасці, коордынацыя калькі агентаў, пры чым адны агент можа быць вызваны як сервер інструмента, а таксама адбіраны рэестр перавераных сервераў з рэйтынгамі безпекі.
Частыя запытанні
Чы рэшта MCP — гэта проста вызначэнне функцыі з дадзенымі дапаможнымі крокамі? Не, адколькі гэтыя два элементы знаходзяцца на разных роўнях. Вызначэнне функцыі — цэла модэль, якая выбірае вызваць інструмент, а MCP — гэта протакол, які спаўнае звязак між модэлью і інструментам. Вызначэнне функцыі вырашае, чы вызваць інструмент, тады як MCP караціцца тым, як да яго дасягнуць і як з яным весты кантакт. Тыповыя сучасныя рашэнні союзнуюць іх.
Ці ён працуе толькі з Claude? Зовсім не так, і гэта адна з ягоя найлепшых якосцей. OpenAI, Google DeepMind і Microsoft адмацавалі MCP, так сама як і тыясячы команд распрацоўшчыкаў. Модэль, якая мае кліента, сумеснага з MCP, можа вікорыстоўваць будзь-які сервер MCP, незалежна ад таго, хто стварыў кожную з сторон.
Чы гэта будзе готава да выкарыстання ў 2026 году? Для большасці прызначэнняў — так, заводзячыся з вялікіх масштабаў ўжыцця, прыказаных вышэй. Аднак для сістэм, дзе важліва швальнасць, такіх як трынкі ў рэальны час або трэбаванні менш 100 мс, абстракцыя мае свае наследкі, і прычынныя з’ѐеднанні праз API можа будзе крашчымі за тыя, якія адбываюцца праз MCP.
Чы гэта дастаткова безпечна для выкарыстання ў корпоратыўных умовах? Гэта стае можлівым. У абнаўленні спецыфікацыі з марца 2025 года была адключана ўсеаспектная сістэма автарызацыі на адной з аснов OAuth 2.1, а план на 2026 год прызначае інтэграцыю з SAML і OIDC з сервісамі аўтэнтыфікацыі, такімі як Okta і Azure AD. Сектары з строгім рэгулюванням, такія як фінансы чы охорона здароў’я, наразе все ўсё ж патрабуюць дадатковых слоёў са адпаведнасцю правілам.
Хто яго керуе, і чы можа Anthropic змяніць напрамак? З гэнвара 2025 года протакол належыць до Асоцыяцыі Agentic AI Foundation, якая ў складзе Linux Foundation. Чырай гэта робіць яго інфраструктурой, нейтральной да віробнікаў, кераванай спяльнай спяльнайя, падобной да HTTP або TCP/IP, і жадная адна компанія не можа ўніварцальна перэнаправіць яго.
Што разлічва інструмент ад рэсурса? Інструмент — гэта дзеянне, якое мадэль выбірае выконаць, такое як запуск запыту, адправка паведамлення або стварэнне файлу. Рэсурс — гэта даны, якія ён пасыўна чытае, такія як файл, схема або дакумент. Рэсурсы завантажваюцца ў кантэкст, але інструменты запускаюцца за патрэбай пад час размовы.
Чы можа адзін сервер абслужваць калькі баз дадзеных чы служб? Так. Сервер можа запрошваць столькі засобаў і рэсурсаў, сколькі ўзгодна, а часта выкарыстоўваемыя рашэнні — гэта серверы дадзеных-платформ, якія даюць права на чытанне да калькі баз дадзеных, кожная з яых выступае як адзін засоб чы рэсурс.
Супаўзвязаныя матэрыялы
- Практычныя заўважэнні: Model Context Protocol (MCP) — адгукі для пачатківаўцаў — Паследовы адгук пра Практычныя заўважэнні: Model Context Protocol (MCP) — адгукі для пачатківаўцаў: контракты, перакананні і шаблоны коду для команд, якія выкарыстоўваюць гэты патэрн.