Практычныя прытамулі: серверы MCP злучаюцца двумя спосабамі, і абодва варухi можна запобiec. Ось як.
Практычныя прыказкі: серверы MCP зламляюцца двума спосабамі, і абодва з гэтых варыянтаў можна запобiec. У цім матэрыяле: контракты, перакантрольванні і месцы для дадзення коду для команд, якія викорыстоўваюць гэты патэрн.
Наступныя прытамлівкі восстанавляюць практычны падход да тэмы «Серверы MCP зламляюцца двума спосабамі, і оба варуемы. Ось што ўтварае захоўнай слой». Акцэнс ставіцца на кантракты, перакрычанняя і месцы для коду, які можна легка адразу заместіць, а не на мотывацыйныя аспекты. Калі працуеце на стадзіі агляду, спачатку запісайце кантракт: неабходныя даны, сігнал успеху і тое, што выходзіць на часты злам. Такі список перакрычанняя дапамагае заставіць пазнейшыя змены коду быць чыстымі. Валіце маленькія, тэставаныя елементы заместо велікіх скрыптав. Калі якісь крок зламваецца, злам должен вказываць на адну адпаведальнасць, а не на заплутаны ланцужок задач.
Сервер MCP — это межа довяры, а не проста інтеграцыя
Сервер An MCP працюе найкраща, калі яго розглядаць як меркаваемую паверхню. Запісаце адзін ідеальны прыклад работы, адзін прыклад неудачы і прыметкі па поверненню да пачатковага стану пры розшырэнні масштаба. Разглядзайце гэты этап як кантракт межа вхіднымі даннымі і перакананымі выходнымі рэзультатамі. Даўце назвы артыфактам, задаце критэрыя успеху і не прабуйце прыймаць частковыя рэзультаты без паведамлення. Адкройце інструменты з вузкімі схемамі та чысткімі пазначэннямі побачных эфектаў. Хостам неабходна знать, якія вызовы мутуюць стан, перш чым яны автаматычна схваляць іх.
Неудача 1: проблемы з правамі, агент успадковуе больш довер'я, чым трэба заданню
Этап аналізу неудач, вызваных недастаткам прав, працюе наякрашэй, калі яго розглядаць як вимерную плошчу. Зафіксавце адны ідеальны прыклад, адну справу неудачы і прыметку па поверненню да пачатковага стану пры розширэнні масштаба. Запісвайце часы выконання і косты токеноў або запытак праза функцыйнае рэзультат. Відразлівасць костаў з самага пачатку запобегае неспакойным рахункам, калі процес пераходзіць з дэмовай среды ў спяльнаныя сераўы. Актуалізавайце інструменты з вузкімі схемамі та чысткімі пазначэннямі побачных эфектаў. Хостам неабходна знаты, якія вызовы мутуюць стан, перш чым яны автаматычна схваляюць іх.
Неудача два: несправы інтэрфейсу, агент не можа з’ясаваць, што робіць інструмент, або паверыць таму, што ён отрымае назад
Этап «Працэзнаследжэнне двух абёранакоў» працюе наякрацэ, калі яго спрыяваць як мерыемую паверхню. Зберагачыце адны ідеальны транскрыпт, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану, перш чым расширваць сферу дзеяння. Храніце настройкі парадульна ад коду прыемліка. Файлы сераўнавання, сховішчы секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаць адбавляць контроль без неабяжнага чытання всіх дадзеных. Адкрывайце інструменты з вузкімі схемамі та чытальнымі пазначэннямі побачных эфектаў. Хостам неабходна знаты, якія вызовы мутуюць стан, перш чым яны автаматычна схваляюць ўпраўленні. Этап «Працэзнаследжэнне двух абёранакоў» працюе наякрацэ, калі яго спрыяваць як мерыемую паверхню. Зберагачыце адны ідеальны транскрыпт, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану, перш чым расширваць сферу дзеяння. Валічыце маленькія, тэставаныя елементы працэў над вялікімі скрыптамі. Калі якісь крок не выйшаў, неудача должна вказваць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцоўкі працэсаў.
Шаблон, які працяюць усі: вы змецелеваеце выходныя данні модэлі і паверяецеся вхіднымі даннямі шара інструментоў
На стадіі «Шаблон, які працяюць усі» неабходна практычна вказаць вхідныя данні, адпаведальную особу за кожны крок і критэрыя завершэння працы перад змінайом коду. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю, не падозрываючы прыхованы стан. Спрыяйце цій стадіі як даговору межа вхіднымі і перакананымі выходнымі даннемі. Даўце назвы артыфактам, практычна вказаць критэрыя успеху і адмовіцеся ад беззвучнага частковага завершэння. Калі наступны крок — це код або вызов інструменту, валідуйце структураваныя выходныя данні за дапамою схемы, а не працяюць у вольнай форме.
Стварэнне шара захавання MCP
Для стадіі стварэння захоўнай рамы MCP неабходна пазначыць вхідныя даны, абавесця крока і критэрыі завершэння пры перадзеяванні коду. Аператары должны магчымае запускаваць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Запісваць час выконання і вартасць токена або запыту разам з функцыйнальнымі рэзултатамі. Відразы вартасці з самага пачатку запобегае неспакоўным рахункам, калі траекторыя пераходзіць з дэмавай версіі у спакоўныя сераўсы. Автентыфікувацца на в’язку і паўторна автарызавацца на роўні дадзенняў. Толькі токен-носіцель не є межай арендаванага прыемку.
from dataclasses import dataclass
from datetime import datetime, timedelta
from typing import Optional
@dataclass
class ScopedToken:
audience: str # which MCP server this token is valid for
permissions: list[str] # e.g. ["read", "create"] - never assume "all"
issued_at: datetime
expires_at: datetime
source_user: str # who originally triggered this, for audit
def issue_scoped_token(user_token: ScopedToken, tool_name: str,
required_permissions: list[str]) -> ScopedToken:
# Never grant more than the tool declares it needs
granted = [p for p in required_permissions if p in user_token.permissions]
if set(required_permissions) - set(granted):
raise PermissionError(
f"{tool_name} requires {required_permissions}, "
f"caller only has {user_token.permissions}"
)
return ScopedToken(
audience=tool_name,
permissions=granted,
issued_at=datetime.utcnow(),
expires_at=datetime.utcnow() + timedelta(minutes=5),
source_user=user_token.source_user,
)
def enforce_audience(token: ScopedToken, expected_tool: str) -> None:
if token.audience != expected_tool:
raise PermissionError(
f"Token issued for '{token.audience}' cannot be used on '{expected_tool}'"
)
def file_support_request(customer_email: str, issue_type: str, description: str) -> dict:
ticket = create_ticket(issue_type, description)
add_comment(ticket.id, f"Filed by {customer_email}")
assign_ticket(ticket.id, team=route_by_type(issue_type))
notify_user(customer_email, ticket.id)
return {
"ticket_id": ticket.id,
"status": "open",
"assigned_team": ticket.team,
}
def safe_error(internal_message: str, request_id: str) -> dict:
# internal_message goes to your logs, never to the model
log.error(internal_message, extra={"request_id": request_id})
return {
"content": [{
"type": "text",
"text": f"Unable to complete the request. Request ID: {request_id}. "
f"Try again or contact support."
}],
"isError": True,
}
MAX_TOOLS_PER_SERVER = 15
def register_tool(server, tool):
if len(server.tools) >= MAX_TOOLS_PER_SERVER:
raise ValueError(
f"{server.name} already has {len(server.tools)} tools. "
f"Split into a domain-specific server instead of adding more."
)
server.tools.append(tool)
Як выявіць, чы ў вашам сервере MCP вэські гэты проблема
Ёнколі хочаце з’ясаваць, як визначыць стадію, неабяжна ўзгадаць вхідныя даны, адпаведальнага за крок і критэрыя завершэння пры зміне коду. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю, не спрабоўваючы здогадвацца пра схованы стан. Конфігурацыю трэба знаходзіць за межамі коду прыкладнення. Файлы сераўнавання, хранільнікі секрэтных дадзеных і флагі функцый належаць у аднам месца, якое аператары можаць пераглядаць, не чытаяўшы весь ланцуг задач. Аутентыфікацыя павінна выконвацца на в’язку, а перарганізацыя прав — на роўні дадзеных. Толькі токэн-носільцы не є межай адпаведальнасці. Ёнколі хочаце з’ясаваць, як визначыць стадію, неабяжна ўзгадаць вхідныя даны, адпаведальнага за крок і критэрыя завершэння пры зміне коду. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Валідзіце маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выконваецца, прычына нехаць вказываць на адну адпаведальнасць, а не на заплутаны ланцуг задач.
Як гэта адпрацоўваецца ў стаке для вырабніцтва
Калі працуеце над этапам «Дзе гэта адпрацоўваецца», спачатку запісайте угоду: неабходныя даны, сігнал успеху і тое, што выходзіць у разе частковага невыпання. Такі список перакладоў заходзіць пазнейшыя змены коду. Спрыймайце гэты этап як угоду між вхіднымі данымі і перакананымі выходнымі рэзультатамі. Дайце назвы артыфактам, задаць правіла пераканання успеху і не падтрымайце тыхія частковыя завершэння. Запісвайце назву інструмента, хэш параметраў, час адпаведзення і рэзультат кожнага вызову. Без такога следу дэбаггінг агента губіць гадзіны.
У вызове інструмента вырабляецца рашэнне пра довер'е
Калі працюеце з элементам «Выклік інструмента — стадія», спачатку запішыце умовы викорыстання: неабяжлівыя даны, сигнал успеху і тое, што выходзіць пад частковыя неудачы. Такі список контролю дапамагае заліцвачыць змяны ў кодзе пазнейшаю часам. Запісвайце час выконання і вартасьць токена або запытку празаўседле з рэзультатамі функцыянальнай працы. Візуабельнае паказанне вартасцей з самага пачатку запобегае неспакоўным рахункам, калі праця пераходзіць з дэмаверсіі ў спакульнаныя сераўысы. Запішвайце назву інструмента, хэш аргументаў, час затрымкі і рэзультат кожнага выкліку. Без такога лёгкага следу дэбагаванне агента займае гадзіны.
Часта задаваемыя запытанні
Калі працуеце над этапам «Частыя запитанні», спачатку запісайце умовы кантракту: неабяжлівыя данні, сігнал успеху і тое, што выходзіць у разе частковага абякання. Такій чэк-ліст дапамагае заставіць пазнейшыя змены коду быць чыстымі. Зберагаеце настройкі за межамі коду прыемлі. Файлы сераўнавання, храненні секрэтных данных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаюць адбавіць аудыт без неабяжлівага чытання всей структуры. Запісвайце назву інструмента, хэш параметраў, час адклікання і рынак кожнага вызову. Без такога лёгкага следу дэбагаванне агента губіць гадзіны. Калі працуеце над этапам «Частыя запитанні», спачатку запісайце умовы кантракту: неабяжлівыя данні, сігнал успеху і тое, што выходзіць у разе частковага абякання. Такій чэк-ліст дапамагае заставіць пазнейшыя змены коду быць чыстымі. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок абякае, прычына абякання должна вказываць на адну адпаведную адпаведальнасць, а не на заплутаны ланцюг задач.
Чэк-ліст для эксплуатацыі
У стадії перагляду канцэларыя выконання неабходна ўзначыць вхідныя даны, адпаведальнага за крок і крэтарыі завершэння пры змяне коду. Аперацыйныя працавнікі должны магчымае запускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан.
Неабходна адначасова документаванне стандартнага і шляху вярнення да нормальнага стану. Перапрыбуткі, людзкія контрольны пункты і обработка некоректных паведамленняў є частью продукту, а не елементамі пазнейшай дапрацоўкі.
Автентыфікуйцеся на воратах і паўторна автарызуйцеся на роўні дадзенняў. Сам токэн-носіцель не є межай адпаведальнасці.
Напішыце кароткі посібнік: як роўнаць клучы, як спрачысці чергу, як анулюваць пярэдню імпортацыю дадзенняў.
Валідзіруйце маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выконваецца, прычына нехарактэрнай роботы должна вказываць на адзіну адпаведальнасць, а не на заплутаны процес.
Автентыфікуйцеся на воратах і паўторна автарызуйцеся на роўні дадзенняў. Сам токэн-носіцель не є межай адпаведальнасці.
Перш чым запускать даную структуру, заморозьце версіі, зафіксавце «золаты» транскрыпты для критичных етапаў і паказвце спосабы вярнення да пачатковага стану. У спільных серавысках неабходны ліміты частоты запытоў, перакананне ў правільнасці належнасці ресурсаў і чысткі власнік для змены секретных даных. Лепш выбіраць простую надзею на надзейнасць, чым хітрыя експерыментальныя дэманстрацыі.
Прымечанне для 964498802023: не кладзіце ключы прадаўцаў у репазітарый, задаце верхнюю межу токеноў на кожную сесію і зберагачыце транскрыпты празаўседліва з фіксатрамі для ацэнкі, каб пазнейшыя замены модэляў заставаліся порупачнымі.
Калі працуеце над пунктом 0 з ударжання безпекі, спачатку запісуйце умовы: неабходныя даны, сігнал успеху і тое, што выходзіць на падчасныя неудачы. Такі чэк-ліст дапамагае заставаць пазнейшыя змены коду чыстымі. Лепш выбіраць маленькія, тэставаныя елементы, чым велікія скрыпты. Калі якась зе ступеней не выйшла, неудача должна вказваць на адну конкрэтную прычыну, а не на заплутаную схему выконання.
Дзеянне паўжасткі 0/631: звярніце увагу на час выканання, класыя ошибак і колькасць токенаў, выкорыстаных для гэтай змяны, а пасля, на аднойчынных крэтарах, а не на асобістых спазыраўнях, выявіце, чы хацеце яе застаўіць.
Этап 0 паўжасткі працуе найэфектывней, калі яго розглядаць як меравальную плошчу. Запісаце адну ідеальную транскрыпцыю, адзін прыклад неудачы і змяны для вярнення да пачатковага стану, прычаму расшырюючы сферу дзеяння. Канфігурацыю трэба заставіць параду ад коду прыемлівача. Файлы сяродавішча, хранільнікі секрэтных дадзеных і флагі функций должны знаходзіцца ў аднам месцы, куды аператары можаць адбавіць аудыт, не чытаючы весь граф.
Дзеянне паўжасткі 0/650: звярніце увагу на час выканання, класыя ошибак і колькасць токенаў, выкорыстаных для гэтай змяны, а пасля, на аднойчынных крэтарах, а не на асобістых спазыраўнях, выявіце, чы хацеце яе застаўіць.
Для першага пасэгу з ударожанняя абярання неабходна ўзначэнне вхідных дадзеных, адпаведальнага за крок і крэтарыяў завершэння працы перад зменым коду. Аперацыйныя працавнікі должны магчымае перадзеўсці крок з вядомага пункту контролю, не спрабоўваючы з’ясаваць захаваны стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптаў. Калі крок не выйшоў, прычына неудачы должна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны процес.
Дзялянка ударожанняя абярання 1/650: зважыце час выканання, класію памылак і колькасць выкорыстоўваных токенав для гэтага пасэгу, а потым вырашыце, чы робіць змяну на адной пазначанай базе пытанняў, а не на адной лічбе прыкладаў.