Как получить доступ к местным серверам MCP через защищенный туннель

Серверы MCP являются отличными кандидатами для разоблачения данных из традиционных баз данных в качестве контекста для крупных языковых моделей (LLMS). Поскольку эти серверы MCP находятся в локальном месте ближе к источникам данных, нам нужен механизм, чтобы выставить их на удаленные LLM и агенты.

В этом уроке мы рассмотрим, как использовать NGROK для надежного разоблачения серверов MCP для размещенных LLMS. Сначала мы создадим сервер MCP на основе потоковой HTTP Transport, который возвращает данные. Затем мы разместим его через туннель NGROK и, наконец, создадим клиента MCP на основе API антропного Клода.

Приведенная ниже диаграмма объясняет этот подход:

Шаг 1: Создайте сервер MCP

Мы создадим простой MCP -сервер, который возвращает данные сотрудников в JSON. Это можно легко заменить на запрос базы данных для получения данных из существующей базы данных. Установите последний модуль Python FASTMCP, прежде чем продолжить.

из FastMCP Import FastMCP MCP = FASTMCP («Сервер работников») @mcp.tool () def get_employeees () -& gt; Список: «» «Возвращает список из 5 записей сотрудников. Каждая запись — это словарь, содержащий: — ID: уникальный идентификатор для сотрудника — Имя: Имя сотрудника — Роль: Название работника» » #Вы можете получить доступ к любому внутреннему данному дансу. [
{«id»: 1, «name»: «Alice», «role»: «Engineer»},
{«id»: 2, «name»: «Bob», «role»: «Designer»},
{«id»: 3, «name»: «Charlie», «role»: «Manager»},
{«id»: 4, «name»: «Diana», «role»: «Analyst»},
{«id»: 5, «name»: «Eve», «role»: «Intern»},
]

if __name__ == «__main__»: mcp.run(transport=»streamable-http») 12345678910111213141516171819202122232425 from fastmcp import FastMCP mcp = FastMCP(«Employee Server») @mcp.tool()def get_employees() -> Список: «» «Возвращает список из 5 записей сотрудников. Каждая запись — это словарь, содержащий: — ID: уникальный идентификатор для сотрудника — Имя: Имя сотрудника — Роль: Название работника» » #Вы можете получить доступ к любому внутреннему данному дансу. [        {«id»: 1, «name»: «Alice», «role»: «Engineer»},        {«id»: 2, «name»: «Bob», «role»: «Designer»},        {«id»: 3, «name»: «Charlie», «role»: «Manager»},        {«id»: 4, «name»: «Diana», «role»: «Analyst»},        {«id»: 5, «name»: «Eve», «role»: «Intern»},    ] Если __name__ == «__main__»: mcp.run (transport = «Streamable-Http»)

Обратите внимание, что мы используем потоковой HTTP в качестве транспорта.

Запустите сервер MCP и убедитесь, что он прослушивает входящие запросы.

Шаг 2: разоблачить сервер MCP через туннель NGROK

Начните с установки NGROK на вашем компьютере. В этом уроке показано, как установить и запустить его на macOS. Обратитесь к документации NGROK для других сред.

Brew Install Ngrok 1 Brew Install Ngrok

Получите свой AuthToken от приборной панели NGROK и инициализируйте CLI.

ngrok config add-wathtoken $ your_authtoken 1 ngrok config add-wathtoken $ your_authtoken

Теперь мы готовы открыть защищенный туннель для разоблачения нашего MCP -сервера.

ngrok http 1 ngrok http

Наш сервер MCP теперь доступен по URL -адресу Ngrok. В моем случае, мы теперь готовы построить клиента MCP, который разговаривает с этой конечной точкой.

Шаг 3: Построение клиента MCP с Claude API

API Claude, которая находится в бета -версии, поддерживает вызывание инструментов, выявленных сервером MCP, непосредственно в запросе. Обратитесь к документации по последней спецификации API.

Приведенный ниже код демонстрирует, как получить доступ к удаленным серверам MCP из API Клода. Предполагается, что у вас есть ключ API от Anpropic и установили необходимые модули Python.

Импорт антропический клиент = anpropic.anpropic (api_key = «your_anpropic_api_key», default_headers = {«anpropic-beta»: «MCP-client-2025-04-04»}) response = client.beta.messages.create (model = «claude-sonnet-4-20250514», max_tokere = 1-й.[
{
«role»: «user»,
«content»: «Who is the intern within the organization?»
}
]mcp_servers =[
{
«type»: «url»,
«url»: »
«name»: «emp-server»,
}
]
) blocks = response.content #print (blocks) final_output = none для блока в reversed (blocks): if hasattr (block, ‘text’): final_output = block.text break print (final_output) 12345678910111213141516171819202122232425262728293031323334353637 Импортировать антропный клиент = антроп. «MCP-Client-2025-04-04»}) response = client.beta.messages.create (model = «claude-sonnet-4-20250514», max_tokens = 1000, сообщения =[        {            «role»: «user»,            «content»: «Who is the intern within the organization?»        }    ]mcp_servers =[        {            «type»: «url»,            «url»: »             «name»: «emp-server»,        }    ]) blocks = response.content#print (blocks) final_output = nefor block в reversed (blocks): if hasattr (block, ‘text’): final_output = block.text break print (final_output)

Код является самоэкспланирующей, поскольку он указывает на удаленный сервер MCP через API. Подсказка посвящена идентификации стажера в компании, и это заставляет Клода вызывать инструменты на сервере MCP.

Клод успешно идентифицировал стажера и показал детали сотрудника. Это подтверждает, что он действительно доступ к серверу удаленного MCP.

В предстоящих учебных пособиях этой серии мы рассмотрим, как внедрить OAuth для обеспечения серверов MCP. Следите за обновлениями.

Trending Stories youtube.com/thenewstack Tech движется быстро, не пропустите эпизод. Подпишитесь на наш канал YouTube, чтобы транслировать все наши подкасты, интервью, демонстрации и многое другое. Группа подпишитесь с эскизом. Janakiram MSV является основным аналитиком в Janakiram & Associates и адъюнкт -преподавателем Международного института информационных технологий. Он также является квалифицированным Google Cloud Developer, сертифицированным архитектором решений Amazon, сертифицированным разработчиком Amazon, … Подробнее от Janakiram MSV

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *