Створіть сервер 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 компанії, і саме це змінює економіку створення агентних систем у компанії: кожну систему обгортають один раз, і кожен сумісний асистент може нею скористатися.