Мне очень нравится LM Studio, так как она позволяет локально запускать ИИ модели. Что позволяет сохранить приватность того о чем ты беседуешь с ИИ. Но по сравнению с коммерческими онлайн моделями, LM Studio не умеет ходить в интернет "из коробки". Те модели не могут использовать актуальную информацию из Интернета для ответов на вопросы.
Не так давно в LM Studio было добавлено возможность подключать MCP-сервера к моделям. Самое первое, что я сделал это, написал небольшой MCP-сервер, который позволяет извлекать текст из URL-адреса. Также может извлекать ссылки, которые есть на странице. Это дает возможность в запросе к ИИ указать адрес и попросить извлечь текст оттуда или ссылки, что бы использовать при ответе.
Что бы это все работало, для начала создаем pyproject.toml
в папке mcp-server
.
[build-system]
requires = ["setuptools>=42", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "url-text-fetcher"
version = "0.1.0"
description = "FastMCP server for URL text fetching"
authors = [{ name="Evgeny Igumnov", email="igumnovnsk@gmail.com" }]
dependencies = [
"fastmcp",
"requests",
"beautifulsoup4",
]
[project.scripts]
url-text-fetcher = "url_text_fetcher.mcp_server:main"
Потом создаем файл mcp_server.py
в папке mcp-server/url_text_fetcher
.
from mcp.server.fastmcp import FastMCP
import requests
from bs4 import BeautifulSoup
from typing import List # for type hints
mcp = FastMCP("URL Text Fetcher")
@mcp.tool()
def fetch_url_text(url: str) -> str:
"""Download the text from a URL."""
resp = requests.get(url, timeout=10)
resp.raise_for_status()
soup = BeautifulSoup(resp.text, "html.parser")
return soup.get_text(separator="\n", strip=True)
@mcp.tool()
def fetch_page_links(url: str) -> List[str]:
"""Return a list of all URLs found on the given page."""
resp = requests.get(url, timeout=10)
resp.raise_for_status()
soup = BeautifulSoup(resp.text, "html.parser")
# Extract all href attributes from <a> tags
links = [a['href'] for a in soup.find_all('a', href=True)]
return links
def main():
mcp.run()
if __name__ == "__main__":
main()
Далее создаем пустой __init.py__
в папке mcp-server/url_text_fetcher
.
И наконец что бы MCP-сервер работал, нужно установить его:
pip install -e .
Внизу окна с чатом в LM Studio, где пользователь вводит вопрос, можно выбрать MCP-сервер через "Integrations". Кликнув "Install" и "Edit mcp.json". В этом файле можно добавить свой MCP-сервер.
{
"mcpServers": {
"url-text-fetcher": {
"command": "python",
"args": [
"-m",
"url_text_fetcher.mcp_server"
]
}
}
}
Второе, что я сделал это, подключил уже готовый MCP-сервер от поисковой системы Brave. Который позволяет в запросе к ИИ указывать что поищи информацию в интернете для ответа на вопрос. Для этого сначала проверьте установлен ли у вас npx
. И установите @modelcontextprotocol/server-brave-search
:
npm i -D @modelcontextprotocol/server-brave-search
Вот как его можно подключить в файле mcp.json
:
{
"mcpServers": {
"brave-search": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-brave-search"
],
"env": {
"BRAVE_API_KEY": ".................."
}
},
"url-text-fetcher": {
"command": "python",
"args": [
"-m",
"url_text_fetcher.mcp_server"
]
}
}
}
Ключ BRAVE_API_KEY
можно получить бесплатно с небольшими ограничениями до 2000 запросов в месяц и не более 1 запроса в секунду.
В итоге внизу окна с чатом в LM Studio, где пользователь вводит вопрос, можно выбрать MCP-сервер через "Integrations" и там должны появиться два MCP-сервера: "mcp/url-text-fetcher" и "mcp/brave-search".