Skip to content
BotServBotServ
MCPEigene ToolsCustom ToolsMCP-ServerIntegration

Eigene MCP-Tools entwickeln

Eigene MCP-Tools für KI-Agenten entwickeln. Custom Tools, MCP-Server, Integration und Praxisbeispiele.

S

schutzgeist

4 min read
Eigene MCP-Tools entwickeln

Eigene MCP-Tools entwickeln

Was dieser Artikel über eigene MCP-Tools behandelt

  • Wie Du eigene MCP-Tools für KI-Agenten entwickelst.
  • Wie Du einen MCP-Server aufsetzt und Tools registrierst.
  • Wie Du Custom Tools für spezifische Aufgaben baust.
  • Praxisbeispiele für verschiedene Tool-Typen.
  • Best Practices für Design, Sicherheit und Dokumentation.

Einleitung: Eigene MCP-Tools verständlich erklärt

Eigene MCP-Tools sind Custom-Integrations für Deine Agenten: Sie verbinden den Agent mit Deinen Systemen, APIs und Datenquellen. Nicht nur Standard-Tools, sondern spezialisierte Werkzeuge für Deine spezifischen Aufgaben.

Dieser Artikel richtet sich an Entwickler, die eigene MCP-Tools bauen wollen. Grundlagen findest Du in MCP und MCP-Berechtigungen.

Warum brauche ich eigene MCP-Tools?

Stell Dir vor, Dein Agent soll Dein internes CRM abfragen. Es gibt kein Standard-Tool dafür. Du baust ein eigenes MCP-Tool: „query_crm(customer_id) → Kundendaten”. Der Agent kann jetzt Dein CRM nutzen, spezialisiert für Deine Infrastruktur.

Eigene MCP-Tools kurz erklärt

MCP-Tool = Interface zwischen Agent und System. Du definierst: Tool-Name, Beschreibung, Parameter, Berechtigungen, Funktion. Der Agent nutzt das Tool über Tool-Calling.

Der Kerngedanke lautet: Custom-Integration für spezifische Aufgaben.

Für wen ist dieser Artikel gedacht?

  • Entwickler, die Custom-Tools für Agenten bauen.
  • Integration-Spezialisten, die Systeme verbinden.
  • Agenten-Bauer, die spezialisierte Werkzeuge brauchen.
  • DevOps, die eigene Tools deployen.

Wichtige Begriffe

  • MCP - Model Context Protocol. Wann nützlich: für Tool-Integration.
  • MCP-Berechtigungen - Zugriffskontrolle. Wann nützlich: für Sicherheit.
  • Tool-Calling - Werkzeuge aufrufen. Wann nützlich: für Agenten.
  • Ollama - Lokaler Modellserver. Wann nützlich: für Agenten.

MCP-Tool-Struktur

class CustomMCPTool:
    """Eigene MCP-Tool-Klasse"""

    def __init__(self):
        self.name = "custom_tool"
        self.description = "Was das Tool tut"
        self.permissions = {
            "allowed_actions": ["read", "write"],
            "rate_limit": 100
        }

    def get_tool_definition(self):
        """Tool-Definition für MCP"""
        return {
            "name": self.name,
            "description": self.description,
            "parameters": {
                "type": "object",
                "properties": {
                    "param1": {
                        "type": "string",
                        "description": "Parameter 1"
                    },
                    "param2": {
                        "type": "integer",
                        "description": "Parameter 2"
                    }
                },
                "required": ["param1"]
            }
        }

    def execute(self, param1, param2=None):
        """Tool ausführen"""
        # Berechtigungen prüfen
        self.check_permission("execute")

        # Tool-Logik
        result = self.do_something(param1, param2)

        return result

Praxisbeispiel 1: CRM-Tool

class CRMTool:
    """MCP-Tool für CRM-Integration"""

    def __init__(self, crm_api_url, api_key):
        self.api_url = crm_api_url
        self.api_key = api_key
        self.name = "query_crm"
        self.description = "CRM abfragen"

    def get_tool_definition(self):
        return {
            "name": self.name,
            "description": "Kundendaten aus CRM abfragen",
            "parameters": {
                "type": "object",
                "properties": {
                    "customer_id": {
                        "type": "string",
                        "description": "Kunden-ID"
                    },
                    "fields": {
                        "type": "array",
                        "items": {"type": "string"},
                        "description": "Felder die zurückgegeben werden sollen"
                    }
                },
                "required": ["customer_id"]
            }
        }

    def query_crm(self, customer_id, fields=None):
        """CRM abfragen"""
        # Berechtigungen prüfen
        self.check_permission("read")

        # API-Aufruf
        response = requests.get(
            f"{self.api_url}/customers/{customer_id}",
            headers={"Authorization": f"Bearer {self.api_key}"},
            params={"fields": fields}
        )

        return response.json()

Praxisbeispiel 2: E-Mail-Tool

class EmailTool:
    """MCP-Tool für E-Mail-Versand"""

    def __init__(self, smtp_config):
        self.smtp = smtp_config
        self.name = "send_email"
        self.description = "E-Mail senden"

    def get_tool_definition(self):
        return {
            "name": self.name,
            "description": "E-Mail senden",
            "parameters": {
                "type": "object",
                "properties": {
                    "to": {"type": "string", "description": "Empfänger"},
                    "subject": {"type": "string", "description": "Betreff"},
                    "body": {"type": "string", "description": "Text"}
                },
                "required": ["to", "subject", "body"]
            }
        }

    def send_email(self, to, subject, body):
        """E-Mail senden"""
        # Berechtigungen prüfen
        self.check_permission("send")

        # Rate-Limit prüfen
        self.check_rate_limit()

        # E-Mail senden
        msg = MIMEText(body)
        msg["Subject"] = subject
        msg["To"] = to

        with smtplib.SMTP(self.smtp["host"], self.smtp["port"]) as server:
            server.send_message(msg)

        return {"status": "sent", "to": to}

Praxisbeispiel 3: Web-Scraping-Tool

class WebScrapingTool:
    """MCP-Tool für Web-Scraping"""

    def __init__(self):
        self.name = "scrape_web"
        self.description = "Webseite scrapen"
        self.allowed_domains = ["example.com", "docs.example.com"]

    def get_tool_definition(self):
        return {
            "name": self.name,
            "description": "Webseite scrapen und Text extrahieren",
            "parameters": {
                "type": "object",
                "properties": {
                    "url": {"type": "string", "description": "URL"},
                    "selector": {"type": "string", "description": "CSS-Selector (optional)"}
                },
                "required": ["url"]
            }
        }

    def scrape_web(self, url, selector=None):
        """Webseite scrapen"""
        # Domain-Check
        domain = urlparse(url).netloc
        if domain not in self.allowed_domains:
            raise PermissionError(f"Domain '{domain}' not allowed")

        # Scraping
        response = requests.get(url)
        soup = BeautifulSoup(response.text, "html.parser")

        if selector:
            elements = soup.select(selector)
            return [e.get_text() for e in elements]
        else:
            return soup.get_text()

MCP-Server für eigene Tools

from mcp import Server, Tool

# MCP-Server erstellen
server = Server("custom-tools")

# Tools registrieren
server.add_tool(Tool(
    name="query_crm",
    description="CRM abfragen",
    parameters=crm_tool.get_tool_definition()["parameters"],
    function=crm_tool.query_crm
))

server.add_tool(Tool(
    name="send_email",
    description="E-Mail senden",
    parameters=email_tool.get_tool_definition()["parameters"],
    function=email_tool.send_email
))

# Server starten
server.run(port=8000)

Sicherheitshinweise

  • Berechtigungen: Jedes Tool sollte Berechtigungen prüfen. Siehe MCP-Berechtigungen.
  • Input-Validierung: Alle Parameter validieren (Type, Format, Range).
  • Rate-Limiting: Für APIs und externe Calls Rate-Limits setzen.
  • Secrets: API-Keys nicht im Code, sondern als Environment-Variablen.
  • Audit: Alle Tool-Aufrufe loggen. Siehe Audit Logging.

Typische Stolpersteine

  • Zu komplexe Tools: Ein Tool sollte eine klare Aufgabe haben. Nicht „Alles-Tool”.
  • Schlechte Beschreibungen: Das Modell entscheidet anhand der Beschreibung. Präzise formulieren.
  • Keine Fehlerbehandlung: Tool sollte Fehler gracefully handhaben und informative Fehler zurückgeben.
  • Keine Dokumentation: Tool sollte gut dokumentiert sein (Parameter, Rückgabewerte, Fehler).
  • Zu viele Parameter: Mehr als 3-4 Parameter überfordern das Modell. Komplexe Parameter als Objekt.

Key Takeaways:

  • Eigene MCP-Tools: Custom-Integration für spezifische Aufgaben.
  • Tool-Struktur: Name, Beschreibung, Parameter, Berechtigungen, Funktion.
  • MCP-Server: Tools registrieren, Agenten verbinden.
  • Für CRM, E-Mail, Web-Scraping, interne APIs.
  • Berechtigungen, Input-Validierung und Audit sind kritisch.

FAQ

Was ist ein MCP-Tool?

Ein Interface zwischen Agent und System: Name, Beschreibung, Parameter, Berechtigungen, Funktion. Der Agent nutzt es über Tool-Calling für spezifische Aufgaben.

Wie baue ich ein MCP-Tool?

1. Tool-Klasse definieren (Name, Beschreibung, Parameter). 2. Funktion implementieren. 3. Berechtigungen hinzufügen. 4. Beim MCP-Server registrieren.

Welche Tools kann ich bauen?

Fast alles: CRM-Integration, E-Mail, Web-Scraping, Datenbanken, APIs, Dateisystem, System-Commands. Was immer Dein Agent braucht.

Wie setze ich Berechtigungen?

In jedem Tool: check_permission() vor Ausführung. Erlaubte Aktionen, Rate-Limits, Domain-Restrictions. Siehe MCP-Berechtigungen.

Wie wichtig ist die Tool-Beschreibung?

Sehr wichtig. Das Modell entscheidet anhand der Beschreibung, welches Tool es nutzt. Präzise, klare Beschreibungen für gute Tool-Auswahl.

Wie sichere ich meine Tools?

Input-Validierung, Berechtigungen, Rate-Limiting, Secrets als Env-Vars, Audit-Log. Alle Parameter validieren, alle Aktionen protokollieren.

Eigene Tools oder Standard-Tools?

Standard-Tools für generische Aufgaben (Datei, Web, DB). Eigene Tools für spezifische Systeme (CRM, interne APIs). Beides kombinieren.

Wie teste ich meine Tools?

Unit-Tests für die Tool-Logik, Integration-Tests für MCP-Verbindung, Agent-Tests für Tool-Auswahl. Teste mit echten Szenarien.

Quellen und weiterführende Literatur

Zurück zum KI Blog
Share:

Ähnliche Beiträge