Integrations
Uses .ENV files for flexible configuration of database connections, server settings, logging preferences, and other environment variables.
Provides tools for interacting with Apache Doris databases, enabling database metadata retrieval, SQL query execution, schema exploration, and audit log retrieval through a standardized Model Control Panel interface.
Implemented using FastAPI to provide both SSE and HTTP streaming endpoints for clients to interact with the MCP protocol, supporting tool calls and prompt interactions.
Дорис MCP Сервер
Doris MCP (Model Control Panel) Server — это бэкэнд-сервис, созданный с помощью Python и FastAPI. Он реализует протокол MCP (Model Control Panel), позволяя клиентам взаимодействовать с ним через определенные «Инструменты». Он в первую очередь предназначен для подключения к базам данных Apache Doris, потенциально используя большие языковые модели (LLM) для таких задач, как преобразование запросов на естественном языке в SQL (NL2SQL), выполнение запросов и выполнение управления и анализа метаданных.
Основные характеристики
- Реализация протокола MCP : предоставляет стандартные интерфейсы MCP, поддерживающие вызовы инструментов, управление ресурсами и оперативное взаимодействие.
- Несколько режимов связи :
- SSE (события, отправленные сервером) : обслуживаются через конечные точки
/sse
(инициализация) и/mcp/messages
(связь) (src/sse_server.py
). - Потоковый HTTP : обслуживается через унифицированную конечную точку
/mcp
, поддерживая запрос/ответ и потоковую передачу (src/streamable_server.py
). - (Необязательно) Stdio : взаимодействие возможно через стандартный ввод/вывод (
src/stdio_server.py
), требуется определенная конфигурация запуска.
- SSE (события, отправленные сервером) : обслуживаются через конечные точки
- Интерфейс на основе инструментов : основные функции инкапсулированы в виде инструментов MCP, которые клиенты могут вызывать по мере необходимости. Доступные в настоящее время ключевые инструменты фокусируются на прямом взаимодействии с базой данных:
- Выполнение SQL (
mcp_doris_exec_query
) - Список баз данных и таблиц (
mcp_doris_get_db_list
,mcp_doris_get_db_table_list
) - Извлечение метаданных (
mcp_doris_get_table_schema
,mcp_doris_get_table_comment
,mcp_doris_get_table_column_comments
,mcp_doris_get_table_indexes
) - Извлечение журнала аудита (
mcp_doris_get_recent_audit_logs
) Примечание: текущие инструменты в основном ориентированы на прямые операции с базами данных.
- Выполнение SQL (
- Взаимодействие с базой данных : предоставляет функциональные возможности для подключения к Apache Doris (или другим совместимым базам данных) и выполнения запросов (
src/utils/db.py
). - Гибкая конфигурация : настраивается с помощью файла
.env
, поддерживает настройки для подключений к базе данных, поставщиков/моделей LLM, ключей API, уровней ведения журнала и т. д. - Извлечение метаданных : возможность извлечения метаданных базы данных (
src/utils/schema_extractor.py
).
Системные требования
- Питон 3.12+
- Детали подключения к базе данных (например, Doris Host, Port, User, Password, Database)
Быстрый старт
1. Клонировать репозиторий
2. Установка зависимостей
3. Настройте переменные среды
Скопируйте файл .env.example
в .env
и измените настройки в соответствии с вашей средой:
Ключевые переменные среды:
- Подключение к базе данных :
DB_HOST
: Имя хоста базы данныхDB_PORT
: порт базы данных (по умолчанию 9030)DB_USER
: Имя пользователя базы данныхDB_PASSWORD
: Пароль базы данныхDB_DATABASE
: Имя базы данных по умолчанию
- Конфигурация сервера :
SERVER_HOST
: Адрес хоста, который прослушивает сервер (по умолчанию0.0.0.0
)SERVER_PORT
: Порт, который прослушивает сервер (по умолчанию3000
)ALLOWED_ORIGINS
: разрешенные CORS источники (через запятую,*
разрешает все)MCP_ALLOW_CREDENTIALS
: разрешать ли учетные данные CORS (по умолчаниюfalse
)
- Конфигурация ведения журнала :
LOG_DIR
: Каталог для файлов журнала (по умолчанию./logs
)LOG_LEVEL
: Уровень журнала (например,INFO
,DEBUG
,WARNING
,ERROR
,INFO
по умолчанию)CONSOLE_LOGGING
: Выводить ли журналы на консоль (по умолчаниюfalse
)
Доступные инструменты MCP
В следующей таблице перечислены основные инструменты, доступные в настоящее время для вызова через клиент MCP:
Название инструмента | Описание | Параметры | Статус |
---|---|---|---|
mcp_doris_get_db_list | Получить список всех имен баз данных на сервере. | random_string (строка, обязательно) | ✅ Активный |
mcp_doris_get_db_table_list | Получить список всех имен таблиц в указанной базе данных. | random_string (string, Обязательно), db_name (string, Необязательно, по умолчанию текущая база данных) | ✅ Активный |
mcp_doris_get_table_schema | Получить подробную структуру указанной таблицы. | random_string (строка, Обязательно), table_name (строка, Обязательно), db_name (строка, Необязательно) | ✅ Активный |
mcp_doris_get_table_comment | Получить комментарий к указанной таблице. | random_string (строка, Обязательно), table_name (строка, Обязательно), db_name (строка, Необязательно) | ✅ Активный |
mcp_doris_get_table_column_comments | Получить комментарии для всех столбцов указанной таблицы. | random_string (строка, Обязательно), table_name (строка, Обязательно), db_name (строка, Необязательно) | ✅ Активный |
mcp_doris_get_table_indexes | Получить информацию об индексе для указанной таблицы. | random_string (строка, Обязательно), table_name (строка, Обязательно), db_name (строка, Необязательно) | ✅ Активный |
mcp_doris_exec_query | Выполнить SQL-запрос и вернуть команду результата. | random_string (строка, Обязательно), sql (строка, Обязательно), db_name (строка, Необязательно), max_rows (целое число, Необязательно, по умолчанию 100), timeout (целое число, Необязательно, по умолчанию 30) | ✅ Активный |
mcp_doris_get_recent_audit_logs | Получите записи журнала аудита за последний период. | random_string (строка, обязательно), days (целое число, необязательно, по умолчанию 7), limit (целое число, необязательно, по умолчанию 100) | ✅ Активный |
Примечание: Все инструменты требуют параметр random_string
в качестве идентификатора вызова, который обычно автоматически обрабатывается клиентом MCP. «Необязательный» и «Обязательный» относятся к внутренней логике инструмента; клиенту может потребоваться предоставить значения для всех параметров в зависимости от его реализации. Перечисленные здесь имена инструментов являются базовыми именами; клиенты могут видеть их с префиксом (например, mcp_doris_stdio3_get_db_list
) в зависимости от режима подключения.
4. Запустите службу
Если вы используете режим SSE, выполните следующую команду:
Эта команда запускает приложение FastAPI, предоставляя по умолчанию службы SSE и Streamable HTTP MCP.
Конечные точки обслуживания:
- Инициализация SSE :
http://<host>:<port>/sse
- SSE-коммуникация :
http://<host>:<port>/mcp/messages
(POST) - Потоковое HTTP :
http://<host>:<port>/mcp
(поддерживает GET, POST, DELETE, OPTIONS) - Проверка работоспособности :
http://<host>:<port>/health
- (Потенциальная) проверка статуса :
http://<host>:<port>/status
(подтвердите, если реализовано вmain.py
)
Использование
Для взаимодействия с Doris MCP Server требуется MCP Client . Клиент подключается к конечным точкам SSE или Streamable HTTP сервера и отправляет запросы (например, tool_call
) в соответствии со спецификацией MCP для вызова инструментов сервера.
Основной поток взаимодействия:
- Инициализация клиента : подключитесь к
/sse
(SSE) или отправьте вызов методаinitialize
в/mcp
(потоковый). - (Необязательно) Обнаружение инструментов : клиент может вызвать
mcp/listTools
илиmcp/listOfferings
чтобы получить список поддерживаемых инструментов, их описания и схемы параметров. - Вызов инструмента : клиент отправляет сообщение/запрос
tool_call
, указываяtool_name
иarguments
.- Пример: Получить схему таблицы
tool_name
:mcp_doris_get_table_schema
(или имя, специфичное для режима)arguments
: включаютrandom_string
,table_name
,db_name
.
- Пример: Получить схему таблицы
- Ответ на обработку :
- Непотоковый : клиент получает ответ, содержащий
result
илиerror
. - Потоковая передача : клиент получает ряд уведомлений об
tools/progress
, за которыми следует окончательный ответ, содержащийresult
илиerror
.
- Непотоковый : клиент получает ответ, содержащий
Конкретные названия инструментов и параметры должны быть указаны в коде src/tools/
или получены через механизмы обнаружения MCP.
Подключение с помощью курсора
Вы можете подключить Cursor к этому MCP-серверу, используя режим Stdio или SSE.
Режим Stdio
Режим stdio позволяет Cursor напрямую управлять процессом сервера. Конфигурация выполняется в файле настроек MCP Server Cursor (обычно ~/.cursor/mcp.json
или аналогичном).
Если вы используете режим stdio, выполните следующую команду, чтобы загрузить и собрать пакет зависимостей среды, но учтите, что вам необходимо изменить путь к проекту на правильный адрес пути :
- Настройте курсор: добавьте в конфигурацию Cursor MCP запись следующего вида:Copy
- Ключевые моменты:
- Замените
/path/to/your/doris-mcp
на фактический абсолютный путь к корневому каталогу проекта в вашей системе. Аргумент--project
имеет решающее значение дляuv
, чтобы найтиpyproject.toml
и запустить правильную команду. command
установлена наuv
(предполагая, что вы используетеuv
для управления пакетами, как указано вuv.lock
).args
включают--project
, путь,run
иmcp-doris
(который должен соответствовать скрипту, определенному в вашемpyproject.toml
).- Подробности подключения к базе данных (
DB_HOST
,DB_PORT
,DB_USER
,DB_PASSWORD
,DB_DATABASE
) задаются непосредственно в блокеenv
в файле конфигурации. Курсор передаст их серверному процессу. Для этого режима не требуется файл.env
при настройке через Курсор.
- Замените
Режим SSE
Режим SSE требует, чтобы вы сначала запустили сервер MCP независимо, а затем указали Cursor, как к нему подключиться.
- Настройте
.env
: убедитесь, что учетные данные вашей базы данных и любые другие необходимые параметры (например,SERVER_PORT
, если не используется порт по умолчанию 3000) правильно настроены в файле.env
в каталоге проекта. - Запустите сервер: Запустите сервер из терминала в корневом каталоге проекта:Этот скрипт обычно считывает файлCopy
.env
и запускает сервер FastAPI в режиме SSE (проверьте скрипт иsse_server.py
/main.py
для получения подробной информации). Обратите внимание на хост и порт, которые прослушивает сервер (по умолчанию0.0.0.0:3000
). - Настройте курсор: добавьте в конфигурацию Cursor MCP запись следующего вида, указывающую на конечную точку SSE работающего сервера:Примечание: в примере используется порт по умолчаниюCopy
3000
Если ваш сервер настроен для работы на другом порту (например,3010
в примере пользователя), измените URL-адрес соответствующим образом.
После настройки любого из режимов в Cursor вы сможете выбрать сервер (например, doris-stdio
или doris-sse
) и использовать его инструменты.
Структура каталога
Разработка новых инструментов
В этом разделе описывается процесс добавления новых инструментов MCP на сервер Doris MCP с учетом текущей структуры проекта.
1. Используйте служебные модули
Прежде чем писать новую логику взаимодействия с базой данных с нуля, проверьте существующие служебные модули:
doris_mcp_server/utils/db.py
: предоставляет базовые функции для получения подключений к базе данных (get_db_connection
) и выполнения необработанных запросов (execute_query
,execute_query_df
).doris_mcp_server/utils/schema_extractor.py
(классMetadataExtractor
) : предлагает высокоуровневые методы для извлечения метаданных базы данных, такие как перечисление баз данных/таблиц (get_all_databases
,get_database_tables
), получение схем таблиц/комментариев/индексов (get_table_schema
,get_table_comment
,get_column_comments
,get_table_indexes
) и доступ к журналам аудита (get_recent_audit_logs
). Включает механизмы кэширования.doris_mcp_server/utils/sql_executor_tools.py
(функцияexecute_sql_query
) : предоставляет оболочку вокругdb.execute_query
, которая включает проверки безопасности (необязательно, контролируется переменной окруженияENABLE_SQL_SECURITY_CHECK
), добавляет автоматическийLIMIT
к запросам SELECT, обрабатывает сериализацию результатов (даты, десятичные числа) и форматирует вывод в стандартную структуру MCP success/error. Рекомендуется использовать это для выполнения предоставленного пользователем или сгенерированного SQL.
Вы можете импортировать и комбинировать функции этих модулей для создания своего нового инструмента.
2. Реализуйте логику инструмента
Реализуйте основную логику для вашего нового инструмента как async
функцию в doris_mcp_server/tools/mcp_doris_tools.py
. Это сохранит централизованность основных реализаций инструмента. Убедитесь, что ваша функция возвращает данные в формате, который можно легко обернуть в стандартную структуру ответа MCP (см. _format_response
в том же файле для справки).
Пример: Давайте создадим простой инструмент get_server_time
.
3. Зарегистрируйте инструмент (двойная регистрация)
Из-за раздельной обработки режимов SSE/Streamable и Stdio вам необходимо зарегистрировать инструмент в двух местах:
A. SSE/Streamable регистрация ( tool_initializer.py
)
- Импортируйте новую функцию инструмента из
mcp_doris_tools.py
. - Внутри функции
register_mcp_tools
добавьте новую функцию-оболочку, декорированную@mcp.tool()
. - Функция-оболочка должна вызывать функцию вашего основного инструмента.
- Определите имя инструмента и предоставьте подробное описание (включая параметры, если таковые имеются) в декораторе. Не забудьте включить обязательное описание параметра
random_string
для совместимости с клиентом, даже если ваша оболочка явно не использует его.
Пример ( tool_initializer.py
):
B. Регистрация Stdio ( mcp_core.py
)
- Аналогично SSE добавьте новую функцию-оболочку, декорированную
@stdio_mcp.tool()
. - Важно: импортируйте основную функцию инструмента (
mcp_doris_get_server_time
) внутрь функции-оболочки (в этом файле используется шаблон отложенного импорта). - Обертка вызывает функцию основного инструмента. Сама обертка может потребовать
async def
в зависимости от того, какFastMCP
обрабатывает инструменты в режиме Stdio, даже если базовая функция проста (как видно из текущей структуры файла). Убедитесь, что вызов соответствует (например, используйтеawait
при вызове асинхронной функции).
Пример ( mcp_core.py
):
4. Перезапуск и тестирование
После внедрения и регистрации инструмента в обоих файлах перезапустите сервер MCP (в режиме SSE через ./start_server.sh
и убедитесь, что команда Stdio, используемая Cursor, обновлена при необходимости) и протестируйте новый инструмент с помощью клиента MCP (например, Cursor) в обоих режимах подключения.
Внося вклад
Приветствуются ваши вклады через Issues или Pull Requests.
Лицензия
Этот проект лицензирован по лицензии Apache 2.0. Подробности смотрите в файле LICENSE (если он существует).
You must be authenticated.
Tools
Бэкэнд-сервис, реализующий протокол Model Control Panel, который подключается к базам данных Apache Doris, позволяя пользователям выполнять SQL-запросы, управлять метаданными и потенциально использовать LLM для таких задач, как преобразование естественного языка в SQL.
- Основные характеристики
- Системные требования
- Быстрый старт
- Использование
- Подключение с помощью курсора
- Структура каталога
- Разработка новых инструментов
- Внося вклад
- Лицензия
Related Resources
Related MCP Servers
- -securityAlicense-qualityA Model Context Protocol server that provides access to BigQuery. This server enables LLMs to inspect database schemas and execute queries.Last updated -63PythonMIT License
- AsecurityAlicenseAqualityA Model Context Protocol server that enables LLMs to interact with Salesforce data through SOQL queries, SOSL searches, and various API operations including record management.Last updated -1053PythonMIT License
- -securityFlicense-qualityA Model Context Protocol server providing both read and write access to PostgreSQL databases, enabling LLMs to query data, modify records, and manage database schemas.Last updated -4JavaScript
ZenML MCP Serverofficial
-securityFlicense-qualityA server implementing Model Context Protocol that enables LLMs to interact with the ZenML platform, providing access to pipeline data, stack information, and the ability to trigger new pipeline runs.Last updated -13Python