Pattern: Vorhandene MCP-Tools wrappen
Wenn du bereits einen funktionierenden MCP-Server hast, ist der schnellste Weg zu einer Selu-Capability oft ein Wrapper und kein Rewrite.
Diese Seite zeigt das Muster anhand von bring-mcp für Bring!-Einkaufslisten und dem Beispielagenten selu-agent-bring-shopping.
Wann du dieses Muster verwenden solltest
Abschnitt betitelt „Wann du dieses Muster verwenden solltest“Nutze einen Wrapper, wenn:
- der bestehende MCP-Server stabil ist und bereits getestet wurde
- du schnell ausliefern willst und möglichst wenig eigene Integrationslogik schreiben möchtest
- Selu Tools dynamisch erkennen soll, statt Tool-Schemata manuell in
manifest.yamlzu kopieren
Architektur
Abschnitt betitelt „Architektur“- Selu ruft deine Capability per gRPC über
Invokeauf. - Für Discovery ruft Selu das Discovery-Tool
list_toolsder Capability auf. - Der Wrapper startet einen MCP-Subprozess wie
bring-mcpund leitet die Discovery an MCPtools/listweiter. - Selu speichert die erkannten Tools und gleicht Richtlinien ab.
- Normale Tool-Aufrufe werden über MCP
tools/callweitergereicht.
So bleibt die Kompatibilität an der Selu-Grenze bei gRPC erhalten, während die internen MCP-Teile unverändert weiterverwendet werden.
Beispiel-Projektstruktur
Abschnitt betitelt „Beispiel-Projektstruktur“Ordnerselu-agent-bring-shopping/
- agent.yaml
- agent.md
Ordnercapabilities/
Ordnerbring-shopping/
- manifest.yaml
- prompt.md
Ordnercontainer/
- Dockerfile
- requirements.txt
- capability.proto
- server.py
Schritt für Schritt
Abschnitt betitelt „Schritt für Schritt“-
Den Agenten deklarieren
agent.yaml id: bring-shoppingname: Bring Shopping Assistantrouting: inlinesession:trigger: mentionidle_timeout_minutes: 30memory:policy: nonetop_k: 0 -
Dynamische Capability-Tools in
manifest.yamlverwendenStatt die Tool-Liste fest einzutragen, aktivierst du dynamische Discovery:
capabilities/bring-shopping/manifest.yaml id: bring-shoppingclass: toolimage: selu-cap-bring-shopping:latesttool_source: dynamicdiscovery_tool_name: list_toolstools: []credentials:- name: MAILscope: userrequired: truedescription: "Bring account email"- name: PWscope: userrequired: truedescription: "Bring account password" -
Eine Brücke bauen, die Invocation und Discovery unterstützt
Dein Wrapper muss Folgendes unterstützen:
- normale Tool-Aufrufe über
tools/call - Discovery-Aufrufe über
tools/list, nach außen als Selu-list_tools
capabilities/bring-shopping/container/server.py if request.tool_name == "list_tools":bridge = McpBridge(mail_or_dummy, pw_or_dummy)bridge.start()try:raw = bridge.list_tools() # MCP method: tools/listfinally:bridge.close()return InvokeResponse(result_json=json.dumps(normalize(raw)).encode("utf-8"))Das normalisierte Discovery-Ergebnis muss ein JSON-Array mit Objekten sein, die Folgendes enthalten:
namedescriptioninput_schema- optional
recommended_policy
- normale Tool-Aufrufe über
-
Laufzeitabhängigkeiten im Dockerfile verpacken
Installiere beide Seiten:
- Python-Abhängigkeiten für den gRPC-Server und die generierten Stubs
- Node plus das vorgelagerte MCP-Paket
bring-mcp
capabilities/bring-shopping/container/Dockerfile ARG BRING_MCP_NPM_VERSION=latestRUN apt-get update \&& apt-get install -y --no-install-recommends nodejs npm \&& npm install -g "bring-mcp@${BRING_MCP_NPM_VERSION}" \&& rm -rf /var/lib/apt/lists/* -
Das LLM mit
prompt.mdanleitenFüge explizite Hinweise zum Tool-Ablauf hinzu, zum Beispiel: zuerst die Standardliste auflösen, dann Einträge hinzufügen, lesen oder entfernen.
Praktische Hinweise
Abschnitt betitelt „Praktische Hinweise“- Credential-Passthrough: Zugangsdaten aus Selu kommen in
config_jsonan. Mappe sie auf Umgebungsvariablen des MCP-Prozesses. - Standardrichtlinien für Tools: Liefere
recommended_policyim Discovery-Ergebnis mit, etwaaskfür verändernde Tools undallowfür reine Lesezugriffe. - Policy-Abgleich: Selu fügt Richtlinien für neue Tools hinzu und entfernt Richtlinien für gelöschte Tools.
- Netzwerkrichtlinien: Starte mit einer strikten Allowlist für bekannte Upstream-Hosts.
- Fehlerbehandlung: Bewahre aussagekräftige Fehlermeldungen des Upstreams, ohne Geheimnisse in Logs zu leaken.
- Versionen pinnen: Pinne die Version des MCP-Pakets im Dockerfile, damit keine unbeabsichtigten Breaking Changes hereinkommen.