Ekstern MCP-server
fremforge kører en Model Context Protocol-server på:
https://frem.sh/_app/mcpDen giver en AI-assistent læseadgang til din organisations data i fremforge: sikkerhedsfund, komponentoversigten, udrulninger, adgang til pakker, politikker, runner-forbrug og CI-logs. Der er intet at installere. Serveren er ekstern og taler transporten Streamable HTTP.
Hvad værktøjerne er
Hvert værktøj er én operation i fremforges REST API, og et kald af et værktøj er det tilsvarende REST-kald foretaget med dit token. Værktøjet kan præcis det, dit token kan via https://frem.sh/_app/api/v1, med de samme scopes, de samme grænser for antal kald og det samme revisionsspor. En 403 fra REST API’et kommer tilbage som en værktøjsfejl med den samme forklaring.
- Skrivebeskyttede, bortset fra nogle få skriveværktøjer. Værktøjerne er
GET-operationer, der er markeret medreadOnlyHintover for din klient. Nogle få navngivne skriveværktøjer kan handle som dig, men kun efter at du har givet samtykke til hvert enkelt, når du logger ind, og kun hvor din organisations ejere tillader det. - 43 værktøjer, for eksempel
whoami,explain_pull_request,list_events(hændelsesfeedet),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(en organisations indstillinger for Active work, merge-hold, release-train, risikoniveau, AI-forbindelser og AI-funktioner, med hvad du må se) ogget_my_settings(dine egne kontakter for Active work). Din klient viser dem alle med beskrivelser, når den forbinder. - Ikke med: Git-repositories, issues, indholdet af pull requests og lister over workflow-kørsler. De leveres af Forgejos API på
https://frem.sh/api/v1, ikke af fremforges API. Hvorfor en pull request ikke bliver merget, er med: se Hvorfor en pull request ikke bliver merget. - Store resultater skæres af ved 100.000 tegn med en note om det. Brug værktøjets argumenter
limit,cursoreller filtre til at indsnævre dem.
Hvorfor en pull request ikke bliver merget
Værktøjet explain_pull_request svarer på, hvorfor en pull request ikke er blevet merget. Det svarer til REST-kaldet:
curl -sS https://frem.sh/_app/api/v1/orgs/<org>/repos/<repo>/pulls/<number>/why \
-H "Authorization: Bearer $FREMFORGE_TOKEN"Det kræver scopet findings:read. Med en forbindelse via login er læseadgang til repositoryet nok.
Svaret læser de samme fakta, som afgør, om den kan merges. Det er merge-køens egen status, de påkrævede tjek på head-commitet, godkendelser, om auto-merge er armeret, konflikter og et åbent issue med etiketten release-freeze i repositoryet. En assistent får ét svar i stedet for selv at skulle stykke det sammen fra listen over tjek.
{
"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": []
}stateer én afmergeable,waiting,blocked,failed,mergedellerclosed.reasonsstår med fejl først, derefter blokeringer og så ventetider. Hver årsag har encode, en kortdetailog ennext_action.- Koder fra pull requesten:
required_check_failedogrequired_check_pending.stale_base_check: et påkrævet tjek blev rødt, og base-branchen har flyttet sig, siden tjekket startede. Opdatér branchen, og kør tjekket igen, før du fejlsøger det.approvals_missing:next_actionnævner, hvem du skal spørge.conflict,draft,armedognot_armed.
- Kode fra repositoryet:
freeze. - Koder fra merge-køen (
source: "queue"):group_failed,pending_timeout,failing_checks,own_checks_timeout,conflict,draft,approvals,no_permission,protected_files,merge_style,renovateogagit. En fjernelse, som forklaringen ikke genkender, har kodenqueue_removed. queuegiver placeringen, længden og et forventet tidspunkt, mens pull requesten står i merge-køen.incompletenævner ethvert faktum, der ikke kunne læses, for eksempelfreezeellerapprovals. Svaret kan så mangle en årsag. Der gættes ikke.
Til den rå liste over tjek for en vilkårlig branch, et tag eller et commit har forbindelser via login også get_commit_status, som returnerer Forgejos samlede status.
Token
Serveren accepterer et fremforge-API-token (ffp_…) som bearer-token. Opret et på https://frem.sh/<org>/_admin/api-tokens med Opret token, og giv det læse-scopes til de værktøjer, du vil bruge. Hvert værktøjs beskrivelse nævner det scope, det kræver, for eksempel findings:read, components:read, policy:read eller runners:read.
Andre legitimationsoplysninger afvises, herunder Git-adgangstokens (Forgejos personlige adgangstokens) og Forgejos OAuth-tokens. Med et API-token er Forgejo-værktøjerne (repositories, pull requests, issues) ikke tilgængelige: de kræver forbindelsen via login.
Start med værktøjet whoami. Det viser, hvilken organisation og hvilke scopes tokenet har.
Claude Code
claude mcp add --transport http fremforge https://frem.sh/_app/mcp \
--header "Authorization: Bearer ffp_<your-token>"Eller i .mcp.json:
{
"mcpServers": {
"fremforge": {
"type": "http",
"url": "https://frem.sh/_app/mcp",
"headers": { "Authorization": "Bearer ${FREMFORGE_TOKEN}" }
}
}
}Cursor
I ~/.cursor/mcp.json (eller .cursor/mcp.json i et projekt):
{
"mcpServers": {
"fremforge": {
"url": "https://frem.sh/_app/mcp",
"headers": { "Authorization": "Bearer ffp_<your-token>" }
}
}
}Log ind i stedet for at bruge et token. Udelad headers, så logger Cursor dig ind med OAuth. Ifølge Cursors MCP-dokumentation understøtter Cursor OAuth for servere, der kræver det:
{
"mcpServers": {
"fremforge": { "url": "https://frem.sh/_app/mcp" }
}
}Cursor registrerer sig selv hos frem.sh, så du behøver intet klient-id. Den åbner derefter frem.sh i din browser, og du logger ind og giver adgang som beskrevet i Login og samtykke. Når du er logget ind, får Cursor også de skrivebeskyttede Forgejo-værktøjer. Desktop-appen modtager login på din egen maskine; Cursor på nettet og Cursor Agents modtager det på cursor.com. Vil du stoppe, så fjern serveren, eller slå den fra under Customize, og træk den også tilbage på frem.sh.
Mistral
Le Chat. En administrator tilføjer en egen MCP-forbindelse:
- Server-URL:
https://frem.sh/_app/mcp - Godkendelse: HTTP Bearer Token med dit
ffp_…-token.
Le Chat inddeler værktøjer i læse- og skrivefunktioner. Alle fremforges værktøjer er skrivebeskyttede.
Agents API og SDK. Send tokenet som header. I Python-SDK’et giver du MCPClientStreamableHTTP en StreamableHTTPServerParams(url="https://frem.sh/_app/mcp", headers={"Authorization": "Bearer ffp_…"}). Når du registrerer en Studio-forbindelse (POST /v1/connectors), lægger du den samme header i headers.
Le Chat kan også logge dig ind med OAuth i stedet for et token: se Le Chat.
Forbindelser med login: claude.ai, ChatGPT, Le Chat
Chat-apps, der tilføjer en MCP-server som en forbindelse (connector), logger dig ind med OAuth i stedet for et token. fremforge er autorisationsserver for https://frem.sh/_app/mcp. Den understøtter Client ID Metadata Documents, så en forbindelse, der identificerer sig med et offentliggjort dokument, ikke skal registreres. Den understøtter også dynamisk klientregistrering for forbindelser, der registrerer sig selv. Du skal aldrig indtaste et klient-id eller et secret.
Login og samtykke
Forbindelsen åbner frem.sh i din browser. Det, der følger, er det samme for alle forbindelser:
- Log ind på frem.sh som sædvanligt, med din organisations single sign-on og anden faktor, hvor de gælder. Er du allerede logget ind, springes dette trin over.
- fremforges samtykkeside viser forbindelsens navn, den adresse, den sender dig tilbage til, og hvad den kan: læse, som dig, de data og repositories i fremforge, du kan læse. Identificerede forbindelsen sig med et metadatadokument, viser siden dokumentets fulde adresse. fremforge har ikke verificeret navnet, så tillad det kun, hvis det er dig selv, der tilføjer forbindelsen.
- Vælg Tillad. Du vender tilbage til chat-appen, og forbindelsen vises som forbundet.
En forbundet assistent kan bruge værktøjerne ovenfor plus skrivebeskyttede Forgejo-værktøjer: 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 og list_workflow_jobs. Den kan ikke ændre noget.
Den har præcis den adgang, du har via API’et. Organisationsværktøjerne svarer for de organisationer, du ejer, og skrivebeskyttet der, hvor du er revisor. Forgejo-værktøjerne svarer for de repositories, Forgejo lader dig læse. Din organisations IP-tilladelsesliste gælder for forbindelsen, ligesom den gælder for dig.
Forbindelsen handler på dine vegne og har ingen egen identitet. En revisionshændelse, som dens kald skriver, angiver dig som actor med forbindelsen som en detalje: fields.agent er mcp-client:<client id>. Administrationens revisionslog viser sådanne hændelser med mærket via agent.
Forbindelsen modtager aldrig din adgangskode til frem.sh eller dine tokens. Dens egen adgang gælder en time ad gangen og fornyes i baggrunden.
claude.ai
Egne forbindelser (custom connectors) virker i Claude på nettet, i Claude Desktop og i Cowork. Gratisabonnementer tillader én egen forbindelse. Claudes vejledning om custom connectors har de aktuelle trin:
- Pro og Max: gå til Customize → Connectors, vælg + Add og derefter Add custom connector. Team og Enterprise: en ejer går til Organization settings → Connectors, vælger Add og derefter Custom → Web. Medlemmerne finder derefter forbindelsen under Customize → Connectors og vælger Connect.
- Giv den et navn, for eksempel
fremforge, og indtast server-URL’enhttps://frem.sh/_app/mcp. - Behold Use Claude’s published identity som OAuth-klient. Register automatically virker også. Lad request-headers stå tomme.
- Vælg Add, log derefter ind, og giv adgang som beskrevet i Login og samtykke.
For at bruge den vælger du + i en chat, derefter Connectors, og slår fremforge til for den samtale. For at fjerne den bruger du Remove eller menuen ved siden af forbindelsen på samme side og trækker den derefter også tilbage på frem.sh.
ChatGPT
ChatGPT kalder egne MCP-servere for plugins eller apps. Det kræver udviklertilstand at tilføje en, og på abonnementerne Business, Enterprise og Edu kan det være nødvendigt, at en workspace-administrator tillader det. OpenAIs vejledning om at forbinde en MCP-server til ChatGPT har de aktuelle trin:
- Åbn ChatGPT Plugins, vælg + og derefter Add custom MCP server.
- Indtast et navn og en beskrivelse. Under Connection vælger du Public endpoint og indtaster
https://frem.sh/_app/mcp. - Vælg OAuth som godkendelse. ChatGPT finder frem.sh’s login via serveren, så der kræves intet klient-id. Bekræft risikoadvarslen, og vælg Create as a plugin.
- Log ind, og giv adgang som beskrevet i Login og samtykke.
ChatGPT viser de værktøjer, den fandt. For at bruge dem skriver du @ i en ny samtale og vælger pluginet. For at fjerne det afbryder eller sletter du det i ChatGPT’s app-indstillinger og trækker det derefter også tilbage på frem.sh.
Le Chat
I Le Chat er det en administrator, der tilføjer egne forbindelser. På abonnementerne Free, Pro og Student er kontoejeren administrator. Mistrals dokumentation om MCP-forbindelser har de aktuelle trin:
- Åbn Connectors, vælg + Add Connector, og skift til fanen Custom MCP Connector.
- Indtast et navn til forbindelsen uden mellemrum, for eksempel
fremforge, og server-URL’enhttps://frem.sh/_app/mcp. - Vælg Connect. Le Chat genkender OAuth 2.1 og registrerer sig selv.
- Log ind, og giv adgang som beskrevet i Login og samtykke.
Hver bruger kan godkende funktioner på forhånd under Connectors → My Connectors på forbindelsens fane Functions. Ellers spørger Le Chat før hvert kald. Alle fremforges funktioner er skrivebeskyttede. Vil du holde op med at bruge den, så fjern den på siden Connectors, og træk den også tilbage på frem.sh. Le Chat accepterer også et ffp_-token som HTTP-bearer-token i stedet for login, som under Mistral ovenfor.
Desktop-apps og omdirigeringer
En desktop- eller kommandolinjeklient, der logger ind via browseren, skal have koden tilbage på samme enhed. fremforge accepterer to slags omdirigeringer til det:
- Loopback:
http://127.0.0.1/…,http://[::1]/…ellerhttp://localhost/…. Porten ignoreres ved sammenligningen, så en klient kan lytte på en hvilken som helst ledig port (RFC 8252 afsnit 7.3). Claude Code og Cursors desktop-app virker på denne måde. - App-skemaer, såsom
cursor://…,vscode://…ellercom.example.app:/callback, til klienter uden et client secret. De skal matche præcist, inklusive port. Samtykkesiden nævner skemaet og advarer om, at enhver installeret app kan gøre krav på et, så tillad det kun for en app, du selv forbinder.
Nogle skemaer accepteres aldrig som omdirigering, uanset store og små bogstaver:
- skemaer, som en browser eller et operativsystem behandler som indhold eller navigation:
javascript,data,file,blob,ftp,about,ws,wss,vbscript,view-source,chrome,chrome-extension,moz-extensionogintent; - fremforges egne navne:
fremforge,fremogsh.frem; httppå alt andet end en loopback-adresse.
PKCE er påkrævet i alle tilfælde.
Bloker forbindelser for en organisation
Forbindelser er tilladt som standard. En ejer kan blokere dem under Administration → Sikkerhed → AI-forbindelser eller med PUT /orgs/{org}/policy og {"ai_connectors": {"access": "blocked"}}. Så længe de er blokeret, afvises ethvert kald fra en forbindelse til organisationens data, herunder dens repositories, med 403. API-tokens påvirkes ikke. Hver ændring registreres i revisionsloggen som tenant.ai_connectors.blocked eller tenant.ai_connectors.allowed.
Træk en forbindelse tilbage
Når du trækker en forbindelse tilbage, afsluttes alle dens sessioner på én gang. Vis dine forbindelser, og slet derefter den, du vil trække tilbage, med legitimationsoplysninger, der bærer din identitet, såsom dem, fremforge auth login gemmer:
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"Vil du forbinde den igen, så tilføj den igen; den beder så om dit samtykke igen. Tilbagekalder du fremforges forbindelsesapplikation under Autoriserede OAuth2-applikationer på frem.sh/user/settings/applications, eller deaktiveres din konto, afsluttes også alle dine forbindelser, næste gang en af dem bruges.
Tjek forbindelsen
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":{}}}'Fejl
| Du ser | Betydning |
|---|---|
HTTP 401 med WWW-Authenticate: Bearer | Intet token, eller et ukendt, udløbet eller tilbagekaldt token. Headerens resource_metadata henviser forbindelser til login. |
Et værktøjsresultat, der begynder med HTTP 403 | Tokenet er gyldigt, men mangler værktøjets scope eller kan ikke nå den organisation. Værktøjets beskrivelse nævner scopet. |
Et værktøjsresultat, der begynder med HTTP 404 | Organisationen, repositoryet eller objektet findes ikke, eller tokenet kan ikke se det. |
HTTP 405 på GET | Forventet. Serveren er tilstandsløs og svarer kun på POST. |
Suverænitet
Din assistents leverandør modtager det, værktøjerne returnerer, på samme måde som den modtager de filer, du åbner. fremforge sender ikke dine data til nogen AI-leverandør. MCP-serveren er en del af fremforges API og kører på den samme platform i EU.