Agenten erreichen deine privaten Systeme.
Ohne eingehende Ports und ohne öffentliche IP.
Ein kleiner Bridge-Container in deinem Netzwerk verbindet sich von innen mit connic. Über ihn erreichen Verbindungen, Tools, MCP-Server und eigene KI-Modelle deine Datenbanken, Queues und APIs.
Einen Container starten. Er verbindet sich nur nach außen.
Starte die Bridge dort, wo sie deine Dienste und das Internet erreicht. Sie hält eine ausgehende Verbindung zu relay.connic.co offen.
- Ein Token pro Bridge
- Erzeugst du ihn unter Projekt-Settings › Bridge neu, trennt connic die alte Verbindung binnen Sekunden.
- Optionale Allowlist
- ALLOWED_HOSTS beschränkt die Bridge auf exakte host:port-Paare und protokolliert jeden blockierten Versuch. Ohne die Variable erreicht sie alles, was ihr Netzwerk erreicht.
- Verschlüsselt übertragen
- Der Datenverkehr zwischen Bridge und connic läuft über WSS, also WebSocket über TLS.
Eine Zeile leitet den Traffic über die Bridge.
Verbindungsdateien und MCP-Server nennen die Bridge im YAML. Python-Code erreicht einen privaten Host unter <target>.cnc-bridge-<bridge_id>.
- connectors/*.yaml
- Kafka und SQS in beide Richtungen, PostgreSQL, E-Mail, S3-Downloads und ausgehende Webhooks, über Name oder ID der Bridge.
- tools/, middleware/, hooks/, guardrails/
- Jede TCP-Verbindung aus deinem Python, mit Clients wie psycopg, httpx oder aiokafka.
- Projekt-Settings › LLM Provider
- Jede Anfrage an einen eigenen OpenAI-kompatiblen Endpoint wie vLLM, Ollama oder einen LiteLLM-Proxy.
- Projekt-Settings › Notifications
- Webhook- und OpenTelemetry-Kanäle, für Drains, Benachrichtigungen und Freigabeanfragen.
connectors/stock-movements.yaml
type: postgres
name: Stock movements
connection: erp-db
bridge: erp-network
config:
channel: stock_movements
agents:
- stock-checkeragents/stock-checker.yaml
version: "1.0"
name: stock-checker
description: Answers stock questions from the ERP
model: connic/glm-5.3
system_prompt: |
Answer stock and delivery questions with ERP data.
tools:
- stock.stock_level
mcp_servers:
- name: erp
url: http://erp-mcp:8080/mcp
bridge: ${ERP_BRIDGE_ID}tools/stock.py
import os
import psycopg
from connic import bridge_host
def stock_level(sku: str) -> dict:
"""Available stock for one article, read from the ERP database.
Args:
sku: Article number, for example A-1042
"""
host = bridge_host(os.environ["ERP_BRIDGE_ID"], "erp-db")
with psycopg.connect(host=host, port=5432, dbname="erp", user="reader",
password=os.environ["ERP_DB_PASSWORD"]) as conn:
on_hand, reserved = conn.execute(
"SELECT on_hand, reserved FROM stock WHERE sku = %s", (sku,)
).fetchone()
return {"sku": sku, "available": on_hand - reserved}Auch normale Hostnamen laufen über die Bridge.
Kafka, Redis Sentinel und Failover-Clients für Datenbanken verbinden sich mit einem Host und erfahren dort von weiteren. Automatische Routen schicken auch diese Folgeverbindungen über die richtige Bridge.
- Gewohnte Hostnamen
- Eine Route passt auf einen Hostnamen oder eine IP und genau einen TCP-Port. Auch die Broker, die Kafka zurückmeldet, werden geroutet.
- Klare Reihenfolge
- Explizite Bridge-Hostnamen gehen vor, dann exakte Routen, dann Regex. Passt ein Ziel auf zwei Bridges, wird die Verbindung abgelehnt.
- Die Allowlist gilt weiter
- Eine Route wählt nur die Bridge. Ist ALLOWED_HOSTS gesetzt, muss dort auch jeder Broker stehen.
tools/reorders.py
from aiokafka import AIOKafkaProducer
async def request_reorder(sku: str, quantity: int) -> str:
"""Ask purchasing to reorder an article.
Args:
sku: Article number, for example A-1042
quantity: Units to order
"""
producer = AIOKafkaProducer(bootstrap_servers="erp-kafka:9092")
await producer.start()
try:
await producer.send_and_wait("reorders", f"{sku}:{quantity}".encode())
finally:
await producer.stop()
return "queued"Entdecke weitere Features
VerbindungenKafka, SQS, PostgreSQL und E-Mail über die Bridge anbinden.ToolsEigene Tools erreichen private Hosts per Bridge-Hostname.ModelsEigene KI-Modelle in deinem Netzwerk ansprechen.EnvironmentsEine Bridge-ID je Environment, als Variable.ObservabilityDrains an einen Collector in deinem Netzwerk.ApprovalsFreigabeanfragen an ein internes Review-Tool schicken.TestingTools hinter einer Bridge vor jedem Deployment testen.StorageEingebaute Datenbank, Sessions und Retrieval.
Häufig gestellte Fragen
Starte das Docker-Image connicorg/bridge:latest oder installiere die Bridge mit pip install connic-bridge, auf einem Host mit Zugang zu deinen privaten Diensten und zum Internet. Den Token aus Projekt-Settings › Bridge übergibst du als BRIDGE_TOKEN. ALLOWED_HOSTS ist optional, und die Dokumentation enthält ein Beispiel für Docker Compose.
Nein. Die Bridge baut nur ausgehende Verbindungen auf: eine WSS-Verbindung zu relay.connic.co, über die connic den Traffic zu deinen Diensten schickt. Eingehende Verbindungen nimmt sie nie an, du brauchst also weder Firewall-Regel noch öffentliche Adresse.
Kafka und SQS in beide Richtungen, PostgreSQL eingehend per LISTEN/NOTIFY, E-Mail über IMAP und SMTP, S3-Downloads und ausgehende HTTP-Webhooks. Du wählst die Bridge unter Network Access › Bridge oder setzt bridge in connectors/*.yaml. Dienste mit öffentlichem Endpoint, etwa ein gehosteter Kafka-Cluster, brauchen keine.
Ja, jede Bridge hat einen eigenen Token, du kannst also eine pro Netzwerk oder pro Environment betreiben. Verbindungen, LLM Provider, MCP-Server und Kanäle wählen ihre Bridge einzeln. Automatische Routen sind auf 32 pro Bridge und 256 pro Projekt begrenzt.
Mit der Variable erreicht die Bridge nur die aufgeführten host:port-Paare und protokolliert alles andere als blockiert. Fehlt sie oder ist sie leer, erreicht die Bridge jeden Host in ihrem Netzwerk. Automatische Routen umgehen eine gesetzte Liste nie.
Gängige Python-Clients wie psycopg, httpx, requests, aiokafka und redis-py funktionieren mit Hostnamen im Format <target>.cnc-bridge-<bridge_id>, und automatische Routen decken synchrone Standard-Sockets und asyncio-TCP-Verbindungen ab. Bibliotheken mit eigenem Resolver wie aiodns und Verbindungen, die später aus Hintergrund-Threads entstehen, brauchen den expliziten Hostnamen. Prüft der Client dabei Zertifikate, setze SNI oder server_hostname auf das echte Ziel.