Dela via


Konfigurera anpassade MCP-verktyg för lagrade procedurer

Viktigt!

MCP-servern (SQL Model Context Protocol) är tillgänglig i Data API Builder version 1.7 och senare.

Anmärkning

Funktionen SQL MCP Server 2.0 som beskrivs i det här avsnittet är för närvarande i förhandsversion och kan komma att ändras innan den allmänna tillgängligheten. Mer information finns i Nyheter i version 2.0.

SQL MCP Server exponerar tabeller och vyer via allmänna verktyg för datamanipuleringsspråk (DML). För lagrade procedurer kan du gå vidare: ange custom-tool: true på entiteten så att proceduren visas i MCP-verktygslistan som ett namngivet, specialbyggt verktyg. AI-agenter identifierar den med namn, ser dess beskrivning och anropar den direkt – ingen SQL krävs.

Viktigt!

Anpassade verktygsnamn härleds från entitetsnamnet men konverteras till snake_case. Till exempel blir GetProductById en entitet med namnet get_product_by_id i MCP-verktygslistan. Använd snake_case namn när du anropar verktyget. Entitetsnamnet PascalCase accepteras inte som ett verktygsnamn.

Resten av den här artikeln visar hur du lägger till, konfigurerar och testar ett anpassat MCP-verktyg som backas upp av en lagrad procedur.

Förutsättningar

  • Data API Builder version 2.0 eller senare
  • SQL Server-databas med minst en lagrad procedur
  • En befintlig dab-config.json med MCP aktiverat
  • DAB CLI installerat

Aktivera MCP i konfigurationen

Om du inte redan har gjort det, aktivera MCP i körningsavsnittet.

dab configure --runtime.mcp.enabled true

Detta lägger till följande i din dab-config.json:

{
  "runtime": {
    "mcp": {
      "enabled": true
    }
  }
}

Lägg till den lagrade proceduren som ett anpassat verktyg

Använd dab add med --source.type stored-procedure och --mcp.custom-tool true.

dab add GetProductById \
  --source dbo.get_product_by_id \
  --source.type "stored-procedure" \
  --permissions "anonymous:execute" \
  --mcp.custom-tool true

Detta skapar följande entitet i 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
      }
    }
  }
}

Viktigt!

Egenskapen custom-tool är endast giltig för entiteter med lagrad procedur. Om du ställer in den i en tabell eller visar entitet resulterar det i ett konfigurationsfel vid start.

Lägga till en beskrivning för att förbättra agentens noggrannhet

Utan en beskrivning ser agenterna bara det tekniska namnet GetProductById. Med en beskrivning förstår de vad den gör och när den ska användas.

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
      }
    }
  }
}

Kontrollera att verktyget visas i verktygslistan

Starta DAB och anropa tools/list MCP-slutpunkten för att bekräfta att verktyget är registrerat.

dab start

När en MCP-klient anropar tools/listinnehåller svaret ditt anpassade verktyg tillsammans med DML-verktygen:

{
  "tools": [
    {
      "name": "get_product_by_id",
      "description": "Returns full product details including pricing and inventory for a given product ID",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
  ]
}

Anmärkning

Verktygsnamnet använder snake_case (till exempel get_product_by_id för entiteten GetProductById ). Returnerar inputSchema för närvarande tom properties. Agenter förlitar sig på verktygsbeskrivningen och describe_entities för att fastställa rätt parametrar.

Konfigurera flera anpassade verktyg

Du kan registrera flera lagrade procedurer som anpassade verktyg i samma konfiguration.

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"

Kontrollera vilka roller som kan anropa verktyget

Anpassade verktyg respekterar samma rollbaserade åtkomstkontroll (RBAC) som alla andra DAB-entiteter. Ange permissions på entiteten för att begränsa vilka roller som kan köra proceduren.

{
  "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
      }
    }
  }
}

När en agent med anonymous rollen ringer visas inte get_order_summary i tools/list och några direkta tools/call returnerar ett behörighetsfel.

Inaktivera ett anpassat verktyg utan att ta bort det

Ställ in custom-toolfalse för att dölja verktyget för agenter utan att ta bort entiteten.

dab update GetProductById \
  --mcp.custom-tool false

Entiteten finns kvar i konfigurationen och du kan aktivera den igen senare genom att ange --mcp.custom-tool true.