Мне очень нравится 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".

Комментарии (0)