GuideLM Studio

LM Studio som lokal server: anropa modellen via API

Starta servern, hämta modellens id, skicka ett första anrop med curl och Python, slå på API-token och kontrollera att porten bara svarar där den ska.

Publicerad · Senast granskad

En platt svart låda står på ett trägolv framför en mörk vägg. En svart kabel går från ett uttag på lådans framsida och slingrar sig över golvet åt höger, och i övre högra hörnet skymtar bladen från en krukväxt.
LM Studios server lyssnar enligt dokumentationen bara på den egna datorn tills du ändrar bindningen. Steg 6 visar hur du kontrollerar vem som når porten.

Chattfönstret i LM Studio räcker långt, men ett eget skript, en kodassistent eller ett annat program behöver prata med modellen via HTTP. Då startar du LM Studios lokala server. Den har flera API-ytor; den här guiden använder den OpenAI-kompatibla, så att du kan återanvända en OpenAI-klient där basadressen går att ändra och klienten använder en endpoint som LM Studio stöder. Du avslutar med de två inställningar som avgör vem mer som kan använda din modell: API-token och nätverksbindning.

Dokumentationsläge och prov

Kommandon, port, endpoints och inställningar följer LM Studios utvecklardokumentation som den såg ut 16 oktober 2026 (dokumentationens källrepo senast ändrat 8 oktober 2026). Redaktionens dator saknade LM Studio vid kontrollen, så inget anrop nedan är kört mot en LM Studio-server. Python-skriptet är bara syntaxkontrollerat. Varje facit beskriver vad du ska se i ditt eget prov, och inga svar med påhittade värden visas.

1. Starta servern och läs av porten

Utgångsläget är en installerad LM Studio med minst en nedladdad modell. Saknar du det, börja med installationsguiden för Windows. Står du fortfarande i valet mellan verktygen jämför Ollama eller LM Studio dem.

Enligt sidan Running the Server finns två vägar. I appen öppnar du fliken Developer och slår på reglaget Start server. I terminalen använder du lms, LM Studios kommandoradsverktyg. Det följer med appen, men appen måste ha startats minst en gång innan kommandot fungerar.

lms server start
lms server status

Facit: statusraden säger att servern körs och på vilken port. Snabbstarten anger att servern som standard nås på http://localhost:1234, men referensen för lms server start säger att kommandot utan --port använder senast använda port. Lita därför på statusraden, inte på antagandet. Vill du ha porten i ett skript ger lms server status --json --quiet den som JSON. Resten av guiden skriver 1234; byt om din siffra är en annan.

2. Vilka modeller ser servern? GET /v1/models

Den OpenAI-kompatibla ytan har sex endpoints enligt dokumentationen 16 oktober 2026: GET /v1/models samt POST för /v1/responses, /v1/decisions, /v1/chat/completions, /v1/embeddings och /v1/completions. Börja med /v1/models, som bara läser. Skriv curl.exe med ändelsen: i Windows PowerShell 5.1 är curl ett alias för Invoke-WebRequest.

curl.exe -s http://localhost:1234/v1/models

Facit är ett JSON-svar med en lista där varje modell har ett id. Kopiera id:t för modellen du vill använda; det är vad du skriver i fältet model nedan. En fallgrop: sidan om List Models säger att listan kan innehålla alla nedladdade modeller när Just in Time-laddning är på, inte bara de som ligger i minnet. Då laddas modellen först vid anropet, och det första svaret kan dröja. Får curl inget svar alls, med felkod 7, lyssnar ingen server på adressen.

3. Första chattanropet med curl

Anropet går till /v1/chat/completions med en lista messages. Sidan om Chat Completions listar tretton parametrar som servern tar emot, bland andra temperature, max_tokens, stream, stop och seed, och anger att modellens promptmall läggs på automatiskt för chattmodeller. Du skickar alltså rena meddelanden, inga specialtecken för mallen.

I Windows PowerShell 5.1 kan JSON skrivet direkt efter -d tappa sina citattecken på vägen till curl.exe. Skriv därför kroppen till en fil med WriteAllText, som enligt Microsoft skriver UTF-8 utan BOM, och låt curl läsa den med @. Byt din-modell-id mot id:t från steg 2.

$body = '{"model": "din-modell-id", "stream": false, "temperature": 0.7, "max_tokens": 200, "messages": [{"role": "system", "content": "Svara kort på svenska."}, {"role": "user", "content": "Vad är en lokal API-server?"}]}'
[System.IO.File]::WriteAllText("$PWD\chat.json", $body)
curl.exe -s http://localhost:1234/v1/chat/completions -H "Content-Type: application/json" -d "@chat.json"

"stream": false står med för att du ska få ett samlat JSON-objekt i stället för en ström av fragment. Facit: svaret har formen som OpenAI:s referens för chat completions beskriver, och som LM Studio hänvisar till för parametrarnas betydelse. Texten ligger i choices[0].message.content. Säger svaret att modellen inte finns är model inte exakt id:t från steg 2. Jämför tecken för tecken.

LM Studio har också ett eget REST API under /api/v1/, som enligt API-ändringsloggen släpptes officiellt i version 0.4.0 och kan hålla chattens historik på servern. I chattanropet till /v1/chat/completions här skickar du däremot själv med tidigare meddelanden när du vill ställa en följdfråga. Det säger inget om historikstödet i andra endpoints. Bild och text i samma anrop går artikeln om multimodala anrop i LM Studio igenom.

4. Samma anrop från Python

Skriptet skickar exakt samma kropp som curl-anropet och använder bara Pythons standardbibliotek. Det läser en token ur miljövariabeln LM_API_TOKEN om du har satt en; utan token skickas ingen Authorization-rad, vilket behövs först i steg 5. Spara som lmstudio_chat.py och kör python lmstudio_chat.py.

import json
import os
import urllib.request

body = {
    "model": "din-modell-id",
    "stream": False,
    "temperature": 0.7,
    "max_tokens": 200,
    "messages": [
        {"role": "system", "content": "Svara kort på svenska."},
        {"role": "user", "content": "Vad är en lokal API-server?"},
    ],
}
headers = {"Content-Type": "application/json"}
token = os.environ.get("LM_API_TOKEN")
if token:
    headers["Authorization"] = f"Bearer {token}"

req = urllib.request.Request(
    "http://localhost:1234/v1/chat/completions",
    data=json.dumps(body).encode("utf-8"),
    headers=headers,
)
with urllib.request.urlopen(req, timeout=300) as resp:
    svar = json.load(resp)

print(svar["choices"][0]["message"]["content"])

Facit är modellens svar på en rad. Tidsgränsen på 300 sekunder ger utrymme för en modell som först ska laddas. Använder du redan OpenAI:s Python-paket räcker det att ange base_url="http://localhost:1234/v1". LM Studios eget exempel sätter api_key="lm-studio"; det är en platshållare när servern inte kräver token. Paketet skickar api_key som Bearer-token, så när du slår på autentisering är det där din riktiga token ska stå.

5. Slå på API-token och prova att den biter

Sidan om autentisering är tydlig med utgångsläget: som standard kräver LM Studio ingen autentisering för API-anrop. Den som når porten kan alltså köra dina modeller. Token kräver LM Studio 0.4.0 eller senare.

  1. Öppna Developer och serverinställningarna, och slå på Require Authentication.
  2. Klicka på Manage Tokens och sedan Create Token. Ge token ett namn som säger vilket program som ska använda den och välj behörigheter.
  3. Kopiera token direkt. Dokumentationen säger att den inte visas igen.

Lägg token i den aktuella PowerShell-sessionen och provkör med och utan den. -w skriver ut HTTP-statuskoden efter svaret.

$env:LM_API_TOKEN = "klistra-in-din-token"
curl.exe -s -w " HTTP %{http_code}`n" http://localhost:1234/v1/models
curl.exe -s -w " HTTP %{http_code}`n" http://localhost:1234/v1/models -H "Authorization: Bearer $env:LM_API_TOKEN"

Facit för modellistan: anropet utan token ska nekas med ett autentiseringsfel och anropet med token och rätt behörighet ska ge kod 200. Ett nätverksfel eller modellfel bevisar inte att autentiseringen fungerar. Prova också chatt-endpointen med samma chat.json som i steg 3:

curl.exe -s -w " HTTP %{http_code}`n" http://localhost:1234/v1/chat/completions -H "Content-Type: application/json" -d "@chat.json"
curl.exe -s -w " HTTP %{http_code}`n" http://localhost:1234/v1/chat/completions -H "Content-Type: application/json" -H "Authorization: Bearer $env:LM_API_TOKEN" -d "@chat.json"

Även här ska anropet utan token nekas av autentiseringen, medan anropet med giltig token och rätt behörighet ska ge ett chattsvar med kod 200. Kör sedan Python-skriptet från samma session; det plockar upp variabeln. Här finns en lucka i källan som gör proven nödvändiga. Informationsrutan på autentiseringssidan nämner uttryckligen REST API:t och de två SDK:erna, och serverinställningarna beskriver reglaget som ett krav på att API-klienter skickar token i Authorization. Ingen av sidorna säger uttryckligen att de OpenAI-kompatibla endpointsen omfattas. Får du modellistan eller ett chattsvar utan token är just den endpointen inte skyddad i din version. Ett lyckat prov för en endpoint bevisar inte skydd för alla andra; behåll servern på loopback om skyddet för den yta du ska använda inte är verifierat. Inställningen Allow calling servers from mcp.json kräver för övrigt att autentisering är på.

6. Vem kan nå porten?

Referensen för lms server start anger att flaggan --bind har 127.0.0.1 som standard, alltså bara den egna datorn, att 0.0.0.0 lyssnar på alla IPv4-gränssnitt och att bindningen också kan sättas med miljövariabeln LMS_SERVER_HOST. I appen motsvaras det av reglaget Serve on Local Network. Sidan om nätverksåtkomst säger att servern då binder till en adress som inte är localhost, och varnar: varje bindning annan än 127.0.0.1 exponerar servern, och LM Studio rekommenderar autentisering. Kontrollera vad som faktiskt gäller hos dig:

Get-NetTCPConnection -LocalPort 1234 -State Listen | Select-Object LocalAddress,LocalPort
$env:LMS_SERVER_HOST
[Environment]::GetEnvironmentVariable("LMS_SERVER_HOST", "User")
[Environment]::GetEnvironmentVariable("LMS_SERVER_HOST", "Machine")

Facit: Get-NetTCPConnection visar 127.0.0.1 som LocalAddress, och de tre variabelraderna är tomma. Ser du 0.0.0.0, :: eller en privat adress som 192.168.x.x lyssnar servern utåt, och den nås från nätet i den mån brandväggen släpper igenom trafiken. Gör då det sista provet från en annan dator eller telefon på samma nät: http://din-ip:1234/v1/models ska inte ge modellistan utan token. Samma försiktighet gäller CORS. Enligt referensen är CORS av när du inte anger --cors, och LM Studio kallar påslagning en säkerhetsrisk som bör kombineras med autentisering. Slå bara på det för ett webbverktyg som verkligen behöver det.

När du är klar stoppar lms server stop servern; referensen påpekar att pågående anrop då avbryts. Kör du Ollama i stället är guiden om Ollamas API motsvarigheten, med samma upplägg på port 11434.


Källor och metod

Källorna kontrollerades 16 oktober 2026, både på lmstudio.ai och i dokumentationens källrepo på GitHub. Ingen aktuell LM Studio-version anges, eftersom ingen primärkälla gav den vid kontrollen; notera din egen version i appen. Inget kommando i guiden har körts mot LM Studio. Kontrollera guiden igen när LM Studio ändrar sidorna om autentisering, nätverksåtkomst eller OpenAI-ytan.

Skriv in port, bindadress och om token är på i ditt driftkort.

Nästa steg
Öppna driftkortet
→