Создайте сервер MCP на Python и подключите его к Claude Desktop и SQLite.
Создайте сервер MCP на Python, который оборачивает базу данных SQLite, зарегистрируйте его в Claude Desktop для Windows и позвольте модели писать и выполнять собственные SQL-запросы.
Источники: Stop Writing Custom APIs for Your AI Agents: Build an MCP Server in 5 Minutes
Каждый, кто разрабатывает корпоративных агентов, знает, насколько сложно писать «клеевой» код. Один оберточный модуль для базы данных, другой — для интеграции с задачами в Jira, ещё один — для Slack. Умножьте это на десять баз данных и пять фреймворков больших языков моделирования, таких как Claude, AutoGen и LangChain, и структура проекта рушится под собственным весом. Это и есть проблема интеграции типа N×M: искусственный интеллект должен понимать точную структуру каждого источника данных, с которым он взаимодействует.
Протокол контекста модели (Model Context Protocol, MCP) — это открытый стандарт, направленный именно на решение этой проблемы. Представьте себе универсальный кабель USB-C для искусственного интеллекта. Соединение с базой данных создаётся один раз и предоставляется через единственный стандартизированный сервер, позволяя любому совместимому клиенту подключиться, обнаружить доступные инструменты и использовать их. Ниже приведён пример локального сервера MCP, написанного менее чем из 50 строк кода на Python, подключённого к Claude Desktop и использующего базу данных SQLite в реальном времени.
Предварительные требования
Официальный пакет Python mcp выполняет основную работу. Он скрывает детали JSON-RPC, поэтому для предоставления инструмента модели достаточно одного декоратора. Сначала установите его в свою виртуальную среду:
pip install mcp
Также необходимо установить Claude Desktop на этом компьютере.
Написание сервера
Создайте файл с именем mcp_server.py, импортируйте необходимые библиотеки и инициализируйте сервер. Здесь важен один момент: модуль os фиксирует файл SQLite в том же каталоге, что и скрипт. Claude Desktop запускает сервер в фоновом режиме, и без определенного местоположения могут возникнуть ошибки доступа.
import sqlite3
import json
import os
import sys
from mcp.server.mcpserver import MCPServer
# Initialize the MCP server
mcp = MCPServer(name="Enterprise_SQL_Agent")
# Force the database to be created in the exact same folder as this script
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
DB_PATH = os.path.join(BASE_DIR, "enterprise.db")
Далее создается временная база данных, чтобы у модели было что искать. Настройка логирования происходит в стандартный поток ошибок (sys.stderr). Стандартный вывод — это канал, через который MCP общается с клиентом, и случайные записи туда могут его повредить.
def setup_dummy_db():
"""Create a sample employee database for the demo"""
try:
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()
cursor.execute('''CREATE TABLE IF NOT EXISTS employees
(id INTEGER PRIMARY KEY, name TEXT, role TEXT, salary INTEGER)''')
cursor.execute("DELETE FROM employees")
employees = [
("Alice", "Data Scientist", 120000),
("Bob", "DevOps Engineer", 115000),
("Charlie", "AI Researcher", 135000)
]
cursor.executemany("INSERT INTO employees (name, role, salary) VALUES (?, ?, ?)", employees)
conn.commit()
conn.close()
print("Database initialized successfully.", file=sys.stderr)
except Exception as e:
print(f"Database setup error: {e}", file=sys.stderr)
Использование базы данных в качестве инструмента
Основным элементом является обычная функция на Python, которая выполняет SQL-запрос и возвращает строки с данными. Достаточно добавить декоратор @mcp.tool(), после чего сервер автоматически считывает документацию и указания типов, чтобы сгенерировать схему JSON для модели.
@mcp.tool()
def query_employee_database(sql_query: str) -> str:
"""
Executes a SQL SELECT query against the enterprise.db database.
The database contains an 'employees' table with columns:
- id (INTEGER PRIMARY KEY)
- name (TEXT)
- role (TEXT)
- salary (INTEGER)
SECURITY: Only READ operations (SELECT) are permitted.
"""
# Safety Check: Block destructive SQL commands
dangerous_keywords = ["DROP", "DELETE", "UPDATE", "INSERT", "ALTER"]
if any(keyword in sql_query.upper() for keyword in dangerous_keywords):
return "Error: Only SELECT queries are authorized for this tool."
try:
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()
cursor.execute(sql_query)
results = cursor.fetchall()
# Format the output as JSON so the LLM can read it cleanly
column_names = [description[0] for description in cursor.description]
formatted_results = [dict(zip(column_names, row)) for row in results]
conn.close()
return json.dumps(formatted_results, indent=2)
except Exception as e:
return f"Database error: {str(e)}"
Короткий блок запуска завершает файл:
if __name__ == "__main__":
setup_dummy_db()
mcp.run()
Подключение Claude Desktop
Необходимо указать клиенту местоположение сервера. В Windows перейдите в папку %APPDATA%\Claude, откройте файл claude_desktop_config.json в редакторе и добавьте запись mcpServers.
Особенность Windows, которая часто вызывает проблемы: если вы запускаете программу в виртуальной среде, такой как Conda или venv, укажите абсолютный путь к файлу python.exe этой среды вместо обычной команды python, причем все пути должны быть записаны с двойными обратными слешами.
{
"mcpServers": {
"enterprise-sql": {
"command": "C:\\Users\\YourName\\.conda\\envs\\your_env\\python.exe",
"args": [
"D:\\Your\\Project\\Path\\mcp_server.py"
]
}
}
}
Сохраните файл и полностью перезагрузите Claude Desktop.
Проверка работы
Откройте Claude Desktop и найдите иконку молотка (Инструменты) в правом нижнем углу окна чата. Инструмент query_employee_database уже должен там быть зарегистрирован. Хорошим первым тестом будет запрос о том, кто зарабатывает больше всего в таблице сотрудников и какую должность занимает этот человек.
Модель читает описание инструмента, сама пишет SQL-запрос (SELECT * FROM employees ORDER BY salary DESC LIMIT 1;), отправляет его на ваш сервер и преобразует результат в ответ на простом языке. Никакой специальной слоя API не писалось, а схема была обнаружена динамически.
Тот же принцип применим к Slack, Jira, GitHub или любому внутреннему API компании, и именно это меняет экономику создания агентных систем в компании: каждая система оборачивается один раз, и любой совместимый ассистент может ею пользоваться.