Einen Agenten verbinden
Der MCP-Begleitdienst in mcp-server/ gibt einem Agenten die Tools von
Portfolixir und zwei Prompts. Er ruft die JSON-API der Instanz mit
PORTFOLIXIR_API_TOKEN auf und sonst nichts. Verbinden Sie ihn auf einem von
zwei Wegen: Der Client des Agenten startet ihn als lokalen Prozess (stdio),
oder der Client erreicht den Begleitdienst, den der Compose-Stack ohnehin
betreibt (HTTP).
Die Konfigurationen unten nutzen die Form mcpServers, die die meisten
MCP-Clients lesen. Die Schlüsselnamen unterscheiden sich zwischen Clients ein
wenig (etwa der Transport-Schlüssel eines HTTP-Servers); prüfen Sie die
Schreibweise in der Dokumentation Ihres Clients.
Zuerst ein Profil wählen
PORTFOLIXIR_MCP_PROFILE entscheidet, welche Tools der Agent sieht und
aufrufen darf:
| Profil | Der Agent kann |
|---|---|
read |
alles lesen und nichts ändern |
book |
lesen, anlegen und die ersetzenden Schreibzugriffe ausführen (Ändern, Upsert, Setzen), die derselbe Schreibzugriff mit dem früheren Wert rückgängig macht; kein Entfernen, Zusammenführen, keine ISIN-Änderung, kein Stilllegen einer Regel und keine Kursfreigabe |
full (Standard) |
jedes Tool aufrufen |
Zwei der Schreibzugriffe, die book behält, hinterlassen einen Rest, den ihr
Gegenstück nicht beseitigt: Eine Rückbenennung stellt den Namen eines Kontos
wieder her, behält aber den Zwischennamen als früheren Namen, und ein Upsert
über einem Datum mit Anbieterdaten hinterlässt dort einen manuellen Kurs; nur
die Admin-Tools remove_former_name und portfolixir.quotes.release
beseitigen sie.
book passt zu einem Agenten, der eine Instanz einrichtet und in sie bucht,
read zu einem, der nur berichtet. Ein Profil schränkt den Begleitdienst ein,
nicht das API-Token: Ein Agent mit einer Shell und dem Token kann weiterhin
jede Route der API aufrufen. Die Admin-Menge, die book weglässt, und warum,
steht in API und MCP.
Über stdio: Der Client startet den Begleitdienst
Bauen Sie den Begleitdienst einmal, mit Node 24:
npm ci --ignore-scripts --prefix mcp-server
npm run build --prefix mcp-server
Tragen Sie ihn dann in die Konfiguration des Clients ein, mit dem absoluten
Pfad Ihres Checkouts und, als PORTFOLIXIR_API_TOKEN, dem Token, mit dem die
Instanz läuft: aus der .env für Compose, dem Wert, den Sie für einen aus dem
Quellcode gestarteten Server exportiert haben:
{
"mcpServers": {
"portfolixir": {
"command": "node",
"args": ["/absoluter/pfad/zu/portfolixir/mcp-server/dist/index.js"],
"env": {
"PORTFOLIXIR_API_BASE_URL": "http://127.0.0.1:4000",
"PORTFOLIXIR_API_TOKEN": "<das Token, mit dem die Instanz läuft>",
"PORTFOLIXIR_MCP_PROFILE": "book"
}
}
}
}
stdio ist der Standard-Transport des Begleitdienstes, PORTFOLIXIR_MCP_TRANSPORT
braucht also keinen Wert. Das Token steht jetzt auch in der
Konfigurationsdatei des Clients: Halten Sie diese Datei nur für Sie lesbar.
Über HTTP: Der Begleitdienst des Compose-Stacks
docker compose up --build -d startet den Begleitdienst mit der Anwendung, auf
der Loopback-Schnittstelle des Hosts. Setzen Sie das Profil in der .env
(PORTFOLIXIR_MCP_PROFILE=book), erstellen Sie den Dienst mit
docker compose up -d mcp neu und richten Sie den Client darauf aus:
{
"mcpServers": {
"portfolixir": {
"type": "http",
"url": "http://127.0.0.1:4001/mcp",
"headers": {
"Authorization": "Bearer <PORTFOLIXIR_MCP_TOKEN aus .env>"
}
}
}
}
Der Transport ist MCP Streamable HTTP: Jede JSON-RPC-Nachricht ist ein POST
an /mcp, ihr Accept-Header muss application/json und text/event-stream
nennen (eine Anfrage, die nur eines nennt, wird mit 406 beantwortet), und die
Antwort kommt als Event-Stream zurück. Der Begleitdienst betreibt ihn
zustandslos: Er vergibt keine Mcp-Session-Id, baut für jede Anfrage einen
frischen Server und sendet zwischen Anfragen keine Benachrichtigung. Ein
MCP-Client erledigt das alles, sobald URL und Header gesetzt sind.
Jede Anfrage trägt den Header `Authorization: Bearer