Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Это важно
Сервер протокола контекста модели SQL (MCP) доступен в Data API Builder версии 1.7 и выше.
Замечание
Функции SQL MCP Server 2.0, описанные в этом разделе, находятся в предварительной версии и могут измениться до общедоступной доступности. Дополнительные сведения см. в статье "Новые возможности" версии 2.0.
SQL MCP Server предоставляет таблицы и представления с помощью универсальных средств языка обработки данных (DML). Для хранимых процедур можно перейти дальше: задайте custom-tool: true для сущности, чтобы процедура отображалась в списке инструментов MCP как именованное, специально созданное средство. Агенты ИИ обнаруживают его по имени, видят его описание и вызывают его напрямую — не требуется SQL.
Это важно
Пользовательские имена инструментов образуются на основе имени сущности и затем преобразуются в snake_case. Например, сущность, имеющая имя GetProductById, становится get_product_by_id в списке инструментов MCP. При вызове средства используйте имя snake_case. Имя сущности PascalCase не принимается в качестве имени средства.
В остальной части этой статьи показано, как добавить, настроить и протестировать пользовательское средство MCP, поддерживаемое хранимой процедурой.
Необходимые условия
- Построитель api данных версии 2.0 или более поздней версии
- База данных SQL Server с по крайней мере одной хранимой процедурой
- Существующий
dab-config.jsonс включенным MCP - Установлен интерфейс командной строки DAB
Включение MCP в конфигурации
Если вы еще не сделали этого, включите MCP в разделе среды выполнения.
dab configure --runtime.mcp.enabled true
При этом к вашему dab-config.jsonдобавлено следующее:
{
"runtime": {
"mcp": {
"enabled": true
}
}
}
Добавьте хранимую процедуру в качестве пользовательского инструмента
Используйте dab add с --source.type stored-procedure и --mcp.custom-tool true.
dab add GetProductById \
--source dbo.get_product_by_id \
--source.type "stored-procedure" \
--permissions "anonymous:execute" \
--mcp.custom-tool true
При этом создается следующая сущность:dab-config.json
{
"entities": {
"GetProductById": {
"source": {
"object": "dbo.get_product_by_id",
"type": "stored-procedure"
},
"graphql": {
"enabled": true,
"operation": "mutation",
"type": {
"singular": "GetProductById",
"plural": "GetProductByIds"
}
},
"rest": {
"enabled": true,
"methods": [
"post"
]
},
"permissions": [
{
"role": "anonymous",
"actions": [
{
"action": "execute"
}
]
}
],
"mcp": {
"custom-tool": true
}
}
}
}
Это важно
Свойство custom-tool допустимо только для сущностей хранимой процедуры. Установка этого на столе или элементе представления приводит к ошибке конфигурации при запуске.
Добавьте описание для улучшения точности агента
Без описания агенты видят только техническое имя GetProductById. Когда у них есть описание, они понимают, что она делает и когда его следует использовать.
dab update GetProductById \
--description "Returns full product details including pricing and inventory for a given product ID"
{
"entities": {
"GetProductById": {
"description": "Returns full product details including pricing and inventory for a given product ID",
"source": {
"object": "dbo.get_product_by_id",
"type": "stored-procedure"
},
"fields": [],
"graphql": {
"enabled": true,
"operation": "mutation",
"type": {
"singular": "GetProductById",
"plural": "GetProductByIds"
}
},
"rest": {
"enabled": true,
"methods": [
"post"
]
},
"permissions": [
{
"role": "anonymous",
"actions": [
{
"action": "execute"
}
]
}
],
"mcp": {
"custom-tool": true
}
}
}
}
Проверка того, что средство отображается в списке инструментов
Запустите DAB и вызовите конечную точку tools/list MCP, чтобы подтвердить регистрацию средства.
dab start
При вызове tools/listклиента MCP ответ включает в себя пользовательское средство вместе с инструментами DML:
{
"tools": [
{
"name": "get_product_by_id",
"description": "Returns full product details including pricing and inventory for a given product ID",
"inputSchema": {
"type": "object",
"properties": {}
}
}
]
}
Замечание
Имя инструмента использует snake_case (например, get_product_by_id для сущности GetProductById ). В настоящее время inputSchema возвращается пустое значение properties. Агенты полагаются на описание средства и describe_entities, чтобы определить правильные параметры.
Настройка нескольких пользовательских средств
Вы можете зарегистрировать несколько хранимых процедур в качестве пользовательских средств в одной конфигурации.
dab add SearchProducts \
--source dbo.search_products \
--source.type "stored-procedure" \
--permissions "anonymous:execute" \
--mcp.custom-tool true \
--description "Full-text search across product names and descriptions"
dab add GetOrderSummary \
--source dbo.get_order_summary \
--source.type "stored-procedure" \
--permissions "authenticated:execute" \
--mcp.custom-tool true \
--description "Returns order totals and line item counts for a given customer"
Управление тем, какие роли могут вызывать средство
Пользовательские средства соблюдают тот же контроль доступа на основе ролей (RBAC), что и все остальные сущности DAB.
permissions Задайте для сущности ограничение того, какие роли могут выполнять процедуру.
{
"entities": {
"GetOrderSummary": {
"source": {
"object": "dbo.get_order_summary",
"type": "stored-procedure"
},
"graphql": {
"enabled": true,
"operation": "mutation",
"type": {
"singular": "GetOrderSummary",
"plural": "GetOrderSummarys"
}
},
"rest": {
"enabled": true,
"methods": [
"post"
]
},
"permissions": [
{
"role": "authenticated",
"actions": [
{
"action": "execute"
}
]
}
],
"mcp": {
"custom-tool": true
}
}
}
}
При вызове агента с anonymous ролью get_order_summary не отображается в tools/list, и любые прямые tools/call возвращают ошибку разрешения.
Отключение настраиваемого инструмента без его удаления
Установите custom-tool на false, чтобы скрыть инструмент от агентов без удаления сущности.
dab update GetProductById \
--mcp.custom-tool false
Сущность остается в конфигурации, и ее можно повторно включить позже, задав параметр --mcp.custom-tool true.