Fjärr-MCP-server
fremforge kör en server för Model Context Protocol på:
https://frem.sh/_app/mcpDen ger en AI-assistent läsåtkomst till organisationens data i fremforge: säkerhetsfynd, komponentinventariet, driftsättningar, paketåtkomst, policyer, runner-användning och CI-loggar. Det finns inget att installera. Servern körs på distans och använder transporten Streamable HTTP.
Vad verktygen är
Varje verktyg är en operation i fremforges REST API, och ett verktygsanrop är det REST-anropet gjort med din token. Verktyget kan göra exakt det som din token kan göra via https://frem.sh/_app/api/v1, med samma scopes, hastighetsgränser och granskningsspår. En 403 från REST API:t kommer tillbaka som ett verktygsfel med samma förklaring.
- Skrivskyddat, bortsett från några skrivverktyg. Verktygen är
GET-operationer markerade medreadOnlyHintför din klient. Några namngivna skrivverktyg kan agera som dig, men bara efter att du har samtyckt till vart och ett när du loggar in, och bara där organisationens ägare tillåter det. - 43 verktyg, till exempel
whoami,explain_pull_request,list_events(händelseflödet),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 inställningar för Active work, merge-holds, release-tåg, risknivåer, AI-anslutningar och AI-funktioner, med det du får se) ochget_my_settings(dina egna reglage för Active work). Din klient listar alla, med beskrivningar, när den ansluter. - Ingår inte: Git-repon, issues, innehållet i pull requests och listor över arbetsflödeskörningar. De tillhandahålls av Forgejos API på
https://frem.sh/api/v1, inte av fremforges API. Varför en pull request inte mergas ingår däremot: se Varför en pull request inte mergas. - Stora resultat kortas vid 100 000 tecken, med en anteckning om det. Använd verktygets argument
limit,cursoreller filter för att begränsa dem.
Varför en pull request inte mergas
Verktyget explain_pull_request besvarar varför en pull request inte har mergats. Det är REST-anropet:
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 inloggningsanslutning räcker det med läsåtkomst till repot.
Svaret läser samma fakta som avgör mergen: merge-köns egen status, de obligatoriska kontrollerna på head-commiten, godkännanden, om auto-merge är aktiverad, konflikter och en öppen issue med etiketten release-freeze i repot. En assistent får ett enda svar i stället för att behöva pussla ihop det från listan över kontroller.
{
"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": []
}stateär något avmergeable,waiting,blocked,failed,mergedellerclosed.reasonslistas med fel först, sedan blockeringar och sist väntan. Varje orsak har encode, en kortdetailoch ennext_action.- Koder från pull requesten:
required_check_failedochrequired_check_pending.stale_base_check: en obligatorisk kontroll blev röd, och basbranchen har flyttats sedan kontrollen startade. Uppdatera branchen och kör om kontrollen innan du felsöker den.approvals_missing:next_actionanger vem du ska fråga.conflict,draft,armedochnot_armed.
- Kod från repot:
freeze. - Koder från merge-kön (
source: "queue"):group_failed,pending_timeout,failing_checks,own_checks_timeout,conflict,draft,approvals,no_permission,protected_files,merge_style,renovateochagit. En borttagning som förklaringen inte känner igen har kodenqueue_removed. queueanger positionen, längden och en förväntad tid medan pull requesten ligger i merge-kön.incompletenamnger alla fakta som inte gick att läsa, till exempelfreezeellerapprovals. Svaret kan då sakna en orsak. Ingenting gissas.
För den råa listan över kontroller för en branch, tagg eller commit har inloggningsanslutningar också get_commit_status, som returnerar Forgejos sammanlagda status.
Token
Servern accepterar en fremforge-API-token (ffp_…) som bearer-token. Skapa en på https://frem.sh/<org>/_admin/api-tokens med Skapa token och ge den läs-scopes för de verktyg du vill använda. Varje verktygs beskrivning anger vilket scope det behöver, till exempel findings:read, components:read, policy:read eller runners:read.
Andra inloggningsuppgifter avvisas, även Git-åtkomsttoken (Forgejos personliga åtkomsttoken) och Forgejos OAuth-token. Med en API-token är Forgejo-verktygen (repon, pull requests, issues) inte tillgängliga: de kräver inloggningsanslutningen.
Börja med verktyget whoami. Det visar vilken kund och vilka scopes token 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 ett projekt):
{
"mcpServers": {
"fremforge": {
"url": "https://frem.sh/_app/mcp",
"headers": { "Authorization": "Bearer ffp_<your-token>" }
}
}
}Logga in i stället för att använda en token. Utelämna headers, så loggar Cursor in dig med OAuth. Enligt Cursors MCP-dokumentation stöder Cursor OAuth för servrar som kräver det:
{
"mcpServers": {
"fremforge": { "url": "https://frem.sh/_app/mcp" }
}
}Cursor registrerar sig själv hos frem.sh, så du behöver inget klient-id. Sedan öppnas frem.sh i webbläsaren, och du loggar in och tillåter åtkomst enligt beskrivningen i Inloggning och samtycke. Inloggad får Cursor också de skrivskyddade Forgejo-verktygen. Skrivbordsappen tar emot inloggningen på din egen dator; Cursor på webben och Cursor Agents tar emot den på cursor.com. För att sluta, ta bort servern eller stäng av den under Customize, och dra även tillbaka den på frem.sh.
Mistral
Le Chat. En administratör lägger till en egen MCP-anslutning:
- Server URL:
https://frem.sh/_app/mcp - Authentication: HTTP Bearer Token, med din token
ffp_….
Le Chat delar in verktyg i läs- och skrivfunktioner. Alla fremforge-verktyg är skrivskyddade.
Agents API och SDK. Skicka token som en header. I Python-SDK:t ger du MCPClientStreamableHTTP en StreamableHTTPServerParams(url="https://frem.sh/_app/mcp", headers={"Authorization": "Bearer ffp_…"}). När du registrerar en Studio-anslutning (POST /v1/connectors), lägg samma header i headers.
Le Chat kan också logga in dig med OAuth i stället för en token: se Le Chat.
Anslutningar med inloggning: claude.ai, ChatGPT, Le Chat
Chattappar som lägger till en MCP-server som en anslutning loggar in dig med OAuth i stället för en token. fremforge är auktoriseringsservern för https://frem.sh/_app/mcp. Den stöder Client ID Metadata Documents, så en anslutning som identifierar sig med ett publicerat dokument behöver ingen registrering. Den stöder också dynamisk klientregistrering för anslutningar som registrerar sig själva. Du anger aldrig något klient-id eller någon klienthemlighet.
Inloggning och samtycke
Anslutningen öppnar frem.sh i webbläsaren. Det som följer är detsamma för alla anslutningar:
- Logga in på frem.sh som vanligt, med organisationens single sign-on och andra faktor där de gäller. Är du redan inloggad hoppas steget över.
- fremforges samtyckessida visar anslutningens namn, adressen den skickar dig tillbaka till och vad den kan göra: läsa, som dig, den fremforge-data och de repon du kan läsa. Om anslutningen identifierade sig med ett metadatadokument visar sidan dokumentets fullständiga adress. fremforge har inte verifierat namnet, så tillåt den bara om det är du själv som lägger till anslutningen.
- Välj Allow. Du återvänder till chattappen, och anslutningen visas som ansluten.
En ansluten assistent kan använda verktygen ovan, plus skrivskyddade Forgejo-verktyg: 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 och list_workflow_jobs. Den kan inte ändra något.
Den har exakt den åtkomst du har via API:t. Organisationsverktygen svarar för de organisationer du äger, och skrivskyddat där du är granskare. Forgejo-verktygen svarar för de repon som Forgejo låter dig läsa. Organisationens IP-tillåtelselista gäller för anslutningen precis som för dig.
Anslutningen agerar för din räkning och har ingen egen identitet. En granskningshändelse som dess anrop skriver anger dig som actor, med anslutningen som en detalj: fields.agent är mcp-client:<client id>. Administrationens granskningslogg visar sådana händelser med märket via agent.
Anslutningen får aldrig ditt lösenord till frem.sh eller dina token. Dess egen åtkomst gäller en timme i taget och förnyas i bakgrunden.
claude.ai
Egna anslutningar fungerar i Claude på webben, i Claude Desktop och i Cowork. Gratisplaner tillåter en egen anslutning. Claudes guide för egna anslutningar har de aktuella stegen:
- Pro och Max: gå till Customize → Connectors, välj + Add och sedan Add custom connector. Team och Enterprise: en ägare går till Organization settings → Connectors, väljer Add och sedan Custom → Web. Medlemmarna hittar sedan anslutningen under Customize → Connectors och väljer Connect.
- Ge den ett namn, till exempel
fremforge, och ange serverns URLhttps://frem.sh/_app/mcp. - För OAuth-klienten, behåll Use Claude’s published identity. Register automatically fungerar också. Lämna request headers tomma.
- Välj Add, logga sedan in och tillåt åtkomst enligt beskrivningen i Inloggning och samtycke.
För att använda den, välj + i en chatt, sedan Connectors, och slå på fremforge för den konversationen. För att ta bort den, använd Remove eller menyn bredvid anslutningen på samma sida, och dra sedan även tillbaka den på frem.sh.
ChatGPT
ChatGPT kallar egna MCP-servrar för plugins eller appar. För att lägga till en krävs utvecklarläge, och på planerna Business, Enterprise och Edu kan en arbetsyteadministratör behöva tillåta det. OpenAIs guide för att ansluta en MCP-server till ChatGPT har de aktuella stegen:
- Öppna ChatGPT Plugins, välj + och sedan Add custom MCP server.
- Ange ett namn och en beskrivning. Under Connection, välj Public endpoint och ange
https://frem.sh/_app/mcp. - Välj OAuth som autentisering. ChatGPT hittar frem.sh:s inloggning via servern, så inget klient-id behövs. Bekräfta riskvarningen och välj Create as a plugin.
- Logga in och tillåt åtkomst enligt beskrivningen i Inloggning och samtycke.
ChatGPT visar de verktyg den hittade. För att använda dem, skriv @ i en ny konversation och välj pluginet. För att ta bort det, koppla från eller radera det i ChatGPT:s appinställningar, och dra sedan även tillbaka det på frem.sh.
Le Chat
I Le Chat lägger en administratör till egna anslutningar. På planerna Free, Pro och Student är kontoägaren administratör. Mistrals dokumentation om MCP-anslutningar har de aktuella stegen:
- Öppna Connectors, välj + Add Connector och byt till fliken Custom MCP Connector.
- Ange ett anslutningsnamn utan mellanslag, till exempel
fremforge, och serverns URLhttps://frem.sh/_app/mcp. - Välj Connect. Le Chat upptäcker OAuth 2.1 och registrerar sig själv.
- Logga in och tillåt åtkomst enligt beskrivningen i Inloggning och samtycke.
Varje användare kan förgodkänna funktioner under Connectors → My Connectors, på anslutningens flik Functions. Annars frågar Le Chat före varje anrop. Alla fremforge-funktioner är skrivskyddade. För att sluta använda den, ta bort den på sidan Connectors och dra även tillbaka den på frem.sh. Le Chat accepterar också en ffp_-token som HTTP-bearer-token i stället för inloggning, som under Mistral ovan.
Skrivbordsappar och omdirigeringar
En skrivbords- eller kommandoradsklient som loggar in via webbläsaren behöver få tillbaka koden på samma enhet. fremforge accepterar två slags omdirigeringar för detta:
- Loopback:
http://127.0.0.1/…,http://[::1]/…ellerhttp://localhost/…. Porten ignoreras vid matchningen, så en klient kan lyssna på valfri ledig port (RFC 8252 avsnitt 7.3). Claude Code och Cursors skrivbordsapp fungerar så. - Appscheman, som
cursor://…,vscode://…ellercom.example.app:/callback, för klienter utan klienthemlighet. De matchas exakt, port inräknad. Samtyckessidan namnger schemat och varnar för att vilken installerad app som helst kan göra anspråk på det, så tillåt det bara för en app som du själv ansluter.
Vissa scheman accepteras aldrig som omdirigeringar, oavsett skiftläge:
- scheman som en webbläsare eller operativsystemet behandlar som innehåll eller navigering:
javascript,data,file,blob,ftp,about,ws,wss,vbscript,view-source,chrome,chrome-extension,moz-extensionochintent; - fremforges egna namn:
fremforge,fremochsh.frem; httppå något annat än en loopback-adress.
PKCE krävs i samtliga fall.
Blockera anslutningar för en organisation
Anslutningar är tillåtna som standard. En ägare kan blockera dem under Organisationens administration → Säkerhet → AI-anslutningar, eller med PUT /orgs/{org}/policy och {"ai_connectors": {"access": "blocked"}}. Så länge de är blockerade avvisas varje anslutningsanrop för organisationens data, även dess repon, med 403. API-token påverkas inte. Varje ändring registreras i granskningsloggen som tenant.ai_connectors.blocked eller tenant.ai_connectors.allowed.
Dra tillbaka en anslutning
När du drar tillbaka en anslutning avslutas alla dess sessioner på en gång. Lista dina anslutningar och radera sedan den du vill dra tillbaka, med en inloggningsuppgift som bär din identitet, till exempel den som fremforge auth login sparar:
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"För att ansluta den igen lägger du till den på nytt; den ber då om ditt samtycke igen. Om du återkallar fremforges anslutningsapplikation under Auktoriserade OAuth2-appar på frem.sh/user/settings/applications, eller om kontot inaktiveras, avslutas också alla dina anslutningar nästa gång någon av dem används.
Kontrollera anslutningen
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":{}}}'Fel
| Du ser | Betydelse |
|---|---|
HTTP 401 med WWW-Authenticate: Bearer | Ingen token, eller en okänd, utgången eller återkallad token. Headerns resource_metadata hänvisar anslutningar till inloggningen. |
Ett verktygsresultat som börjar med HTTP 403 | Token är giltig men saknar verktygets scope, eller når inte den organisationen. Verktygets beskrivning anger scopet. |
Ett verktygsresultat som börjar med HTTP 404 | Organisationen, repot eller objektet finns inte, eller så kan token inte se det. |
HTTP 405 på GET | Väntat. Servern är tillståndslös och svarar bara på POST. |
Suveränitet
Din assistents leverantör får det som verktygen returnerar, på samma sätt som den får de filer du öppnar. fremforge skickar inte dina data till någon AI-leverantör. MCP-servern är en del av fremforges API och körs på samma EU-plattform.