Remote-MCP-Server
fremforge betreibt einen Model-Context-Protocol-Server unter:
https://frem.sh/_app/mcpEr gibt einem KI-Assistenten Lesezugriff auf die fremforge-Daten deiner Organisation: Sicherheitsbefunde, das Komponenteninventar, Deployments, Paketzugriff, Richtlinien, Runner-Nutzung und CI-Logs. Es gibt nichts zu installieren. Der Server läuft remote und verwendet den Transport Streamable HTTP.
Was die Tools sind
Jedes Tool entspricht genau einer Operation der fremforge-REST-API, und ein Tool-Aufruf ist dieser REST-Aufruf, ausgeführt mit deinem Token. Das Tool kann genau das, was dein Token über https://frem.sh/_app/api/v1 kann – mit denselben Scopes, Rate-Limits und demselben Audit-Trail. Ein 403 der REST-API kommt als Tool-Fehler mit derselben Erklärung zurück.
- Schreibgeschützt, bis auf einige Schreib-Tools. Die Tools sind
GET-Operationen und für deinen Client mitreadOnlyHintmarkiert. Einige benannte Schreib-Tools können in deinem Namen handeln, aber nur, nachdem du bei der Anmeldung jedem einzelnen zugestimmt hast, und nur dort, wo die Owner deiner Organisation es erlauben. - 43 Tools, zum Beispiel
whoami,explain_pull_request,list_events(der Event-Feed),list_merge_holds,list_sast_findings,list_dependency_findings,list_secret_findings,search_components,list_vulnerable_components,get_dependency_paths,list_repo_deployments,get_actions_run_logs,get_org_policy,get_package_access,get_org_settings(die Einstellungen einer Organisation zu Active work, Merge-Holds, Release-Trains, Risikostufen, KI-Verbindungen und KI-Funktionen, mit dem, was du sehen darfst) undget_my_settings(deine eigenen Active-work-Schalter). Dein Client listet sie alle mit Beschreibungen auf, sobald er sich verbindet. - Nicht enthalten: Git-Repositorys, Issues, Inhalte von Pull Requests und Listen von Workflow-Läufen. Diese liefert die Forgejo-API unter
https://frem.sh/api/v1, nicht die fremforge-API. Warum ein Pull Request nicht gemergt wird, ist enthalten: siehe Warum ein Pull Request nicht gemergt wird. - Große Ergebnisse werden bei 100.000 Zeichen abgeschnitten, mit einem entsprechenden Hinweis. Grenze sie mit den Argumenten
limit,cursoroder den Filterargumenten des Tools ein.
Warum ein Pull Request nicht gemergt wird
Das Tool explain_pull_request beantwortet, warum ein Pull Request noch nicht gemergt wurde. Es entspricht diesem REST-Aufruf:
curl -sS https://frem.sh/_app/api/v1/orgs/<org>/repos/<repo>/pulls/<number>/why \
-H "Authorization: Bearer $FREMFORGE_TOKEN"Es benötigt den Scope findings:read. Mit einem Connector per Anmeldung genügt Lesezugriff auf das Repository.
Die Antwort liest dieselben Fakten, die über den Merge entscheiden: den eigenen Status der Merge-Queue, die erforderlichen Checks auf dem Head-Commit, Freigaben, ob Auto-Merge aktiviert ist, Konflikte und ein offenes Issue mit dem Label release-freeze im Repository. Ein Assistent bekommt eine Antwort, statt sie sich aus der Check-Liste zusammensuchen zu müssen.
{
"repo": "acme/api",
"number": 42,
"state": "failed",
"next_action": "update the branch from main and re-run \"code-build / build (pull_request)\"",
"reasons": [
{
"code": "stale_base_check",
"kind": "failure",
"source": "pr",
"check": "code-build / build (pull_request)",
"detail": "Required check \"code-build / build (pull_request)\" failed on an old base: main has moved since it ran.",
"next_action": "update the branch from main and re-run \"code-build / build (pull_request)\""
},
{
"code": "not_armed",
"kind": "info",
"source": "pr",
"detail": "Auto-merge is not armed.",
"next_action": "arm auto-merge once the reasons above are cleared"
}
],
"queue": null,
"checks": { "required": ["code-build / build (pull_request)", "fremforge/dep-scan"], "passed": 1, "pending": 0, "failed": 1 },
"approvals": { "required": 1, "approved": 1, "waived": false },
"armed": false,
"incomplete": []
}stateist einer der Wertemergeable,waiting,blocked,failed,mergedoderclosed.reasonswerden mit Fehlern zuerst aufgeführt, dann Blockaden, dann Wartezustände. Jeder Grund hat einencode, ein kurzesdetailund einenext_action.- Codes aus dem Pull Request:
required_check_failedundrequired_check_pending.stale_base_check: Ein erforderlicher Check wurde rot, und der Basis-Branch hat sich seit dem Start des Checks bewegt. Aktualisiere den Branch und führe den Check erneut aus, bevor du ihn debuggst.approvals_missing: Dienext_actionnennt, wen du fragen solltest.conflict,draft,armedundnot_armed.
- Code aus dem Repository:
freeze. - Codes aus der Merge-Queue (
source: "queue"):group_failed,pending_timeout,failing_checks,own_checks_timeout,conflict,draft,approvals,no_permission,protected_files,merge_style,renovateundagit. Eine Entfernung, die der Erklärer nicht kennt, hat den Codequeue_removed. queuegibt Position, Länge und eine erwartete Zeit an, solange der Pull Request in der Merge-Queue ist.incompletenennt jeden Fakt, der nicht gelesen werden konnte, zum Beispielfreezeoderapprovals. Dann fehlt der Antwort womöglich ein Grund. Geraten wird nichts.
Für die reine Check-Liste eines beliebigen Branches, Tags oder Commits haben Connectors mit Anmeldung außerdem get_commit_status, das den kombinierten Status von Forgejo zurückgibt.
Token
Der Server akzeptiert ein fremforge-API-Token (ffp_…) als Bearer-Token. Erstelle eines unter https://frem.sh/<org>/_admin/api-tokens mit Token erstellen und gib ihm die Lese-Scopes für die Tools, die du nutzen willst. Die Beschreibung jedes Tools nennt den Scope, den es braucht, zum Beispiel findings:read, components:read, policy:read oder runners:read.
Andere Zugangsdaten werden abgelehnt, auch Git-Zugriffstoken (persönliche Zugriffstoken von Forgejo) und OAuth-Token von Forgejo. Mit einem API-Token stehen die Forgejo-Tools (Repositorys, Pull Requests, Issues) nicht zur Verfügung: Dafür brauchst du den Connector mit Anmeldung.
Beginne mit dem Tool whoami. Es zeigt, welchen Mandanten und welche Scopes das Token trägt.
Claude Code
claude mcp add --transport http fremforge https://frem.sh/_app/mcp \
--header "Authorization: Bearer ffp_<your-token>"Oder in .mcp.json:
{
"mcpServers": {
"fremforge": {
"type": "http",
"url": "https://frem.sh/_app/mcp",
"headers": { "Authorization": "Bearer ${FREMFORGE_TOKEN}" }
}
}
}Cursor
In ~/.cursor/mcp.json (oder .cursor/mcp.json in einem Projekt):
{
"mcpServers": {
"fremforge": {
"url": "https://frem.sh/_app/mcp",
"headers": { "Authorization": "Bearer ffp_<your-token>" }
}
}
}Anmelden statt Token. Lass headers weg, dann meldet Cursor dich per OAuth an. Laut der MCP-Dokumentation von Cursor unterstützt Cursor OAuth für Server, die es verlangen:
{
"mcpServers": {
"fremforge": { "url": "https://frem.sh/_app/mcp" }
}
}Cursor registriert sich selbst bei frem.sh, du brauchst also keine Client-ID. Anschließend öffnet Cursor frem.sh in deinem Browser, und du meldest dich an und erlaubst den Zugriff wie unter Anmeldung und Zustimmung beschrieben. Angemeldet erhält Cursor außerdem die schreibgeschützten Forgejo-Tools. Die Desktop-App empfängt die Anmeldung auf deinem eigenen Rechner; Cursor im Web und Cursor Agents empfangen sie unter cursor.com. Zum Beenden entferne den Server oder schalte ihn unter Customize aus, und widerrufe ihn zusätzlich auf frem.sh.
Mistral
Le Chat. Eine Administratorin oder ein Administrator fügt einen eigenen MCP-Connector hinzu:
- Server-URL:
https://frem.sh/_app/mcp - Authentifizierung: HTTP Bearer Token, mit deinem
ffp_…-Token.
Le Chat sortiert Tools in Lese- und Schreibfunktionen. Alle fremforge-Tools sind schreibgeschützt.
Agents API und SDK. Übergib das Token als Header. Im Python SDK gibst du MCPClientStreamableHTTP ein StreamableHTTPServerParams(url="https://frem.sh/_app/mcp", headers={"Authorization": "Bearer ffp_…"}) mit. Wenn du einen Studio-Connector registrierst (POST /v1/connectors), setze denselben Header in headers.
Le Chat kann dich statt mit einem Token auch per OAuth anmelden: siehe Le Chat.
Connectors mit Anmeldung: claude.ai, ChatGPT, Le Chat
Chat-Apps, die einen MCP-Server als Connector hinzufügen, melden dich per OAuth an statt mit einem Token. fremforge ist der Autorisierungsserver für https://frem.sh/_app/mcp. Er unterstützt Client ID Metadata Documents, sodass ein Connector, der sich mit einem veröffentlichten Dokument ausweist, keine Registrierung braucht. Außerdem unterstützt er die dynamische Client-Registrierung für Connectors, die sich selbst registrieren. Du gibst nie eine Client-ID oder ein Client-Secret ein.
Anmeldung und Zustimmung
Der Connector öffnet frem.sh in deinem Browser. Was dann folgt, ist für jeden Connector gleich:
- Melde dich wie gewohnt bei frem.sh an, mit dem Single Sign-on und dem zweiten Faktor deiner Organisation, wo diese gelten. Bist du schon angemeldet, entfällt dieser Schritt.
- Die Zustimmungsseite von fremforge zeigt den Namen des Connectors, die Adresse, an die er dich zurückschickt, und was er tun darf: in deinem Namen die fremforge-Daten und Repositorys lesen, die du lesen kannst. Hat sich der Connector mit einem Metadatendokument ausgewiesen, zeigt die Seite die vollständige Adresse dieses Dokuments. fremforge hat den Namen nicht überprüft – erlaube den Zugriff also nur, wenn du den Connector selbst hinzufügst.
- Wähle Zulassen. Du kehrst zur Chat-App zurück, und der Connector wird als verbunden angezeigt.
Ein verbundener Assistent kann die oben genannten Tools nutzen, dazu schreibgeschützte Forgejo-Tools: list_repos, get_repo, get_repo_tree, get_file_contents, list_branches, list_commits, get_commit, get_commit_diff, get_commit_status, list_pull_requests, get_pull_request, get_pull_request_diff, list_pull_request_files, list_pull_request_reviews, list_issues, get_issue, list_issue_comments, list_workflow_runs, get_workflow_run und list_workflow_jobs. Ändern kann er nichts.
Er hat genau den Zugriff, den du über die API hast. Die Organisations-Tools antworten für die Organisationen, deren Owner du bist, und schreibgeschützt dort, wo du Auditor bist. Die Forgejo-Tools antworten für die Repositorys, die Forgejo dich lesen lässt. Die IP-Allowlist deiner Organisation gilt für den Connector genauso wie für dich.
Der Connector handelt in deinem Namen und hat keine eigene Identität. Ein Audit-Ereignis, das seine Aufrufe schreiben, nennt dich als actor und den Connector als Detail: fields.agent ist mcp-client:<client id>. Das Admin-Audit-Log zeigt solche Ereignisse mit dem Chip über Agent.
Der Connector erhält nie dein frem.sh-Passwort oder deine Token. Sein eigener Zugriff gilt jeweils eine Stunde und wird im Hintergrund erneuert.
claude.ai
Eigene Connectors funktionieren in Claude im Web, in Claude Desktop und in Cowork. Kostenlose Pläne erlauben einen eigenen Connector. Die Anleitung zu eigenen Connectors von Claude beschreibt die aktuellen Schritte:
- Pro und Max: Geh zu Customize → Connectors, wähle + Add und dann Add custom connector. Team und Enterprise: Ein Owner geht zu Organization settings → Connectors, wählt Add und dann Custom → Web. Mitglieder finden den Connector danach unter Customize → Connectors und wählen Connect.
- Gib ihm einen Namen, zum Beispiel
fremforge, und trage die Server-URLhttps://frem.sh/_app/mcpein. - Behalte für den OAuth-Client Use Claude’s published identity bei. Register automatically funktioniert ebenfalls. Lass die Request-Header leer.
- Wähle Add, melde dich dann an und erlaube den Zugriff wie unter Anmeldung und Zustimmung beschrieben.
Zur Nutzung wählst du in einem Chat +, dann Connectors, und schaltest fremforge für diese Unterhaltung ein. Zum Entfernen nutzt du Remove oder das Menü neben dem Connector auf derselben Seite und widerrufst ihn zusätzlich auf frem.sh.
ChatGPT
ChatGPT nennt eigene MCP-Server Plugins oder Apps. Zum Hinzufügen brauchst du den Entwicklermodus, und in den Plänen Business, Enterprise und Edu muss eventuell ein Workspace-Admin es erlauben. Die Anleitung von OpenAI zum Verbinden eines MCP-Servers mit ChatGPT beschreibt die aktuellen Schritte:
- Öffne ChatGPT Plugins, wähle + und dann Add custom MCP server.
- Gib einen Namen und eine Beschreibung ein. Wähle unter Connection die Option Public endpoint und trage
https://frem.sh/_app/mcpein. - Wähle als Authentifizierung OAuth. ChatGPT findet die Anmeldung von frem.sh über den Server, eine Client-ID ist nicht nötig. Bestätige die Risikowarnung und wähle Create as a plugin.
- Melde dich an und erlaube den Zugriff wie unter Anmeldung und Zustimmung beschrieben.
ChatGPT zeigt die gefundenen Tools an. Zur Nutzung tippst du in einer neuen Unterhaltung @ und wählst das Plugin. Zum Entfernen trennst oder löschst du es in den App-Einstellungen von ChatGPT und widerrufst es zusätzlich auf frem.sh.
Le Chat
In Le Chat fügt eine Administratorin oder ein Administrator eigene Connectors hinzu. In den Plänen Free, Pro und Student ist die Person, der das Konto gehört, zugleich Administrator. Die Dokumentation zu MCP-Connectors von Mistral beschreibt die aktuellen Schritte:
- Öffne Connectors, wähle + Add Connector und wechsle zum Tab Custom MCP Connector.
- Gib einen Connector-Namen ohne Leerzeichen ein, zum Beispiel
fremforge, und die Server-URLhttps://frem.sh/_app/mcp. - Wähle Connect. Le Chat erkennt OAuth 2.1 und registriert sich selbst.
- Melde dich an und erlaube den Zugriff wie unter Anmeldung und Zustimmung beschrieben.
Jede Nutzerin und jeder Nutzer kann Funktionen unter Connectors → My Connectors auf dem Tab Functions des Connectors vorab freigeben. Andernfalls fragt Le Chat vor jedem Aufruf nach. Alle fremforge-Funktionen sind schreibgeschützt. Willst du den Connector nicht mehr nutzen, entferne ihn auf der Seite Connectors und widerrufe ihn zusätzlich auf frem.sh. Le Chat akzeptiert statt der Anmeldung auch ein ffp_-Token als HTTP-Bearer-Token, wie oben unter Mistral beschrieben.
Desktop-Apps und Weiterleitungen
Ein Desktop- oder Kommandozeilen-Client, der sich über den Browser anmeldet, braucht den Code zurück auf demselben Gerät. fremforge akzeptiert dafür zwei Arten von Weiterleitungen:
- Loopback:
http://127.0.0.1/…,http://[::1]/…oderhttp://localhost/…. Der Port wird beim Abgleich ignoriert, sodass ein Client auf jedem freien Port lauschen kann (RFC 8252, Abschnitt 7.3). Claude Code und die Desktop-App von Cursor arbeiten so. - App-Schemata wie
cursor://…,vscode://…odercom.example.app:/callback, für Clients ohne Client-Secret. Sie müssen exakt übereinstimmen, einschließlich Port. Die Zustimmungsseite nennt das Schema und warnt, dass jede installierte App ein Schema beanspruchen kann – erlaube es also nur für eine App, die du selbst verbindest.
Einige Schemata werden nie als Weiterleitung akzeptiert, unabhängig von der Groß- und Kleinschreibung:
- Schemata, die ein Browser oder das Betriebssystem als Inhalt oder Navigation behandelt:
javascript,data,file,blob,ftp,about,ws,wss,vbscript,view-source,chrome,chrome-extension,moz-extensionundintent; - die eigenen Namen von fremforge:
fremforge,fremundsh.frem; httpauf allem außer einer Loopback-Adresse.
PKCE ist in jedem Fall Pflicht.
Connectors für eine Organisation sperren
Connectors sind standardmäßig erlaubt. Ein Owner kann sie unter Organisationsverwaltung → Sicherheit → KI-Verbindungen sperren oder mit PUT /orgs/{org}/policy und {"ai_connectors": {"access": "blocked"}}. Solange sie gesperrt sind, wird jeder Connector-Aufruf auf die Daten dieser Organisation, einschließlich ihrer Repositorys, mit 403 abgelehnt. API-Token sind davon nicht betroffen. Jede Änderung wird im Audit-Log als tenant.ai_connectors.blocked bzw. tenant.ai_connectors.allowed erfasst.
Einen Connector widerrufen
Das Widerrufen eines Connectors beendet alle seine Sitzungen auf einmal. Liste deine Connectors auf und lösche dann den, den du widerrufen willst – mit Zugangsdaten, die deine Identität tragen, etwa denen, die fremforge auth login speichert:
curl -sS https://frem.sh/_app/api/v1/users/me/connector-grants -H "Authorization: Bearer $TOKEN"
curl -sS -X DELETE https://frem.sh/_app/api/v1/users/me/connector-grants/<id> -H "Authorization: Bearer $TOKEN"Um ihn wieder zu verbinden, füge ihn erneut hinzu; er fragt dann erneut nach deiner Zustimmung. Auch das Widerrufen der fremforge-Connector-Anwendung unter Autorisierte OAuth2-Anwendungen auf frem.sh/user/settings/applications oder ein deaktiviertes Konto beendet jeden deiner Connectors, sobald er das nächste Mal verwendet wird.
Verbindung prüfen
curl -sS https://frem.sh/_app/mcp \
-H "Authorization: Bearer $FREMFORGE_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"whoami","arguments":{}}}'Fehler
| Du siehst | Bedeutung |
|---|---|
HTTP 401 mit WWW-Authenticate: Bearer | Kein Token, oder ein unbekanntes, abgelaufenes oder widerrufenes. Das resource_metadata im Header verweist Connectors auf die Anmeldung. |
Ein Tool-Ergebnis, das mit HTTP 403 beginnt | Das Token ist gültig, aber ihm fehlt der Scope des Tools, oder es kann diese Organisation nicht erreichen. Die Tool-Beschreibung nennt den Scope. |
Ein Tool-Ergebnis, das mit HTTP 404 beginnt | Die Organisation, das Repository oder das Objekt existiert nicht, oder das Token kann es nicht sehen. |
HTTP 405 bei GET | Erwartet. Der Server ist zustandslos und beantwortet nur POST. |
Souveränität
Der Anbieter deines Assistenten erhält, was die Tools zurückgeben – genauso, wie er die Dateien erhält, die du öffnest. fremforge sendet deine Daten an keinen KI-Anbieter. Der MCP-Server ist Teil der fremforge-API und läuft auf derselben EU-Plattform.