IR
irwinrodriguez.dev
Zurück zur Dokumentation

Erste Schritte

Vorher benötigen Sie eine FoxAgent-Installation (Installation). Am Ende läuft Ihre VFP-Anwendung, und ein Agent kann hineinschauen.

Schritt 1: prüfen, ob der Broker läuft

Der Installer hat den Broker als Windows-Dienst mit automatischem Start eingerichtet. So prüfen Sie es:

Prüfen, ob der Broker-Dienst läuft
# In PowerShell oder CMD:
sc query FoxAgentBroker

# Erwartet: STATE: 4 RUNNING

Läuft der Dienst nicht, starten Sie ihn über die Windows-Dienstekonsole (services.msc) oder mit diesem Befehl:

Den Broker-Dienst von Hand starten
# Dienst von Hand starten:
net start FoxAgentBroker

Schritt 2: Ihre VFP-Anwendung verbinden

Die Integration besteht aus drei Einfügepunkten: die Anwendung beim Start anmelden, direkt danach Ihre Tools registrieren und beim Beenden abmelden. Der dritte wird vergessen, und die Kosten trägt nicht Sie, sondern Ihr Kunde.

Die Anwendung beim Start anmelden und beim Beenden abmelden
* --- 1. Beim Start, sobald _VFP existiert und VOR READ EVENTS ---
PUBLIC goBridge
goBridge = CREATEOBJECT("FoxAgent.Bridge")

* Vor Connect zwingend: erst dies erlaubt den Blick nach innen.
goBridge.SetInstance(_VFP)

* Connect(id, Name, Stufe) liefert eine JSON-ZEICHENKETTE, keinen
* logischen Wert. Stufe 10 (operator) ist die Stufe eines Fachanwenders:
* der Agent kommt genau so weit wie diese Person von Hand, denn alles
* läuft über Ihre Formulare und deren Prüfungen.
LOCAL lcRes
lcRes = goBridge.Connect("meine-app-001", "Meine VFP-Anwendung", 10)
IF !('"ok":true' $ lcRes)
    * Steht der Broker still oder ist kein Lizenzplatz frei, muss Ihre
    * Anwendung weiterlaufen: FoxAgent ist Zubehör, keine Abhängigkeit.
    * Protokollieren und weitermachen.
    goBridge = .NULL.
ENDIF

* Der Bridge sendet alle 15 Sekunden selbst Heartbeats. Rufen Sie
* Heartbeat() nicht von Hand auf.

* --- 3. Beim Beenden, in Ihrer Aufräumroutine oder in ON SHUTDOWN ---
IF VARTYPE(goBridge) = "O" AND !ISNULL(goBridge)
    TRY
        goBridge.Disconnect("meine-app-001")
    CATCH
        * Ein Fehler hier darf das Beenden niemals verhindern.
    ENDTRY
    goBridge = .NULL.
ENDIF
Disconnect() ist nicht optional Eine Anwendung, die sich nie abmeldet, lässt einen FoxAgent-Thread laufen, während VFP sich beendet, und dem Anwender kann beim Schließen „Mismatched pushjmp/popjmp call“ erscheinen. Außerdem bleibt der Lizenzplatz bis zum Ablauf belegt, sodass ein sofortiger Neustart mit „instance limit reached“ abgelehnt werden kann. Das wurde im Feld gemessen, in beiden Varianten, an derselben Anwendung am selben Tag. Das vollständige Beispiel mit allen drei Punkten liegt als SDK\quickstart.prg bei.

Schritt 3: Ihre Tools (UDTs) registrieren

Ein RegisterTool()-Aufruf pro Tool, unmittelbar nach einem erfolgreichen Connect. Nichts wird von der Festplatte eingelesen, und das ist das Sicherheitsmodell und keine Einschränkung: der Agent kann nur ausführen, was Sie geschrieben, geprüft und kompiliert haben.

Das SDK laden und Ihre Tools registrieren
* Die beiden SDK-Basisklassen, vor dem ersten CREATEOBJECT eines Tools.
* ZWEI Dateien: FoxAgentTool erbt von FoxToolIsolated, das in
* FoxTool.prg liegt. Fehlt sie, erscheint
* "Class definition FOXTOOLISOLATED is not found".
SET PROCEDURE TO "C:\Program Files\FoxAgent\SDK\FoxTool.prg"      ADDITIVE
SET PROCEDURE TO "C:\Program Files\FoxAgent\SDK\FoxAgentTool.prg" ADDITIVE
SET PROCEDURE TO "MeineTools.prg" ADDITIVE

* Ein Aufruf pro Tool, nach Connect.
goBridge.RegisterTool(CREATEOBJECT("KundeSuchenTool"))
goBridge.RegisterTool(CREATEOBJECT("KundensaldoTool"))

Wie eine solche Klasse geschrieben wird, steht in Konfiguration. Wechselt der angemeldete Benutzer, können Sie die Liste mit ClearTools() und UnregisterTool(Name) neu aufbauen: welche Tools es gibt, entscheidet Ihre Anwendung, pro Benutzer.

Schritt 4: Ihren KI-Client verbinden

Der Installer konfiguriert Claude Desktop und OpenCode, sofern er sie findet. Für jeden anderen Client legt er den fertigen Block mit dem echten Pfad unter C:\Program Files\FoxAgent\mcp-foxagent.json ab. Er sieht so aus:

MCP-Block von FoxAgent (mcp-foxagent.json)
{
  "mcpServers": {
    "foxagent": {
      "command": "C:\\Program Files\\FoxAgent\\FoxAgent.McpHost.exe",
      "args": []
    }
  }
}
ClientWohin er gehört
Claude Desktopclaude_desktop_config.json (Einstellungen ▸ Entwickler ▸ Konfiguration bearbeiten)
Claude Codeclaude mcp add foxagent -- "C:\Program Files\FoxAgent\FoxAgent.McpHost.exe"
Cursor%USERPROFILE%\.cursor\mcp.json
OpenCode%USERPROFILE%\.config\opencode\opencode.jsonc (anderes Format: siehe dessen Dokumentation)
Verwenden Sie den Pfad genau so Kürzen Sie ihn nicht auf einen 8.3-Namen. In diesem Ordner liegen zwei FoxAgent-Programme, die in 8.3 kollidieren, und das Suffix ~1 / ~2 vergibt die Reihenfolge der Erstellung: eine Neuinstallation kann Ihren Client dazu bringen, den Broker zu starten, der kein MCP spricht, und er hängt, ohne den Grund zu nennen. Leerzeichen sind unproblematisch, solange Sie jeden Backslash verdoppeln. Starten Sie den Client nach dem Bearbeiten neu.

Schritt 5: fragen

Wenn der Broker läuft, Ihre Anwendung verbunden und der MCP-Client eingerichtet ist, zählt die Startreihenfolge: Broker → Ihre Anwendung → der KI-Client. Fragen Sie zum Beispiel:

  • „Liste die verbundenen VFP-Instanzen auf“
  • „Welche Formulare sind in meine-app-001 geöffnet?“
  • „Mach eine Bildschirmaufnahme der Anwendung“
  • „Welche eigenen Tools hat diese Instanz registriert?“
  • „Suche Kunde 1042 mit dem Tool kunde_suchen“

Die letzten beiden funktionieren ab Stufe 0. Variablen und Cursor zu lesen verlangt Stufe 20, rohes VFP die 90: verweigert der Agent, nennt die Ablehnung die fehlende Stufe und wer die Obergrenze gesetzt hat. Die Stufen sind in Konfiguration erklärt.

Nächste Schritte

  • Eigene Tools (UDTs) erstellen: Die Basisklasse, die Parameter und das Sitzungsmuster, das zum Lesen von Daten nötig ist
  • Rollensystem: Die vier Stufen, wer jede davon eingrenzt und wie Ihre eigene Anwendung sie anhebt