Поделиться через


Настройка пользовательских средств MCP для хранимых процедур

Это важно

Сервер протокола контекста модели 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, поддерживаемое хранимой процедурой.

Необходимые условия

Включение 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, чтобы подтвердить регистрацию средства.

При вызове 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.