MCP LAN file server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP LAN file serverAppend 'Hej fra computer 2' to the shared text file"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP LAN file server med Docker
Dette projekt viser, hvordan en MCP-server kan køre i Docker og give AI-agenter adgang til en tekstfil på værtscomputeren.
MCP-serveren kan bruges af:
en lokal MCP-klient
en AI-agent på samme computer
AI-agenter på andre computere på det samme lokale netværk
Alle klienter arbejder gennem den samme MCP-server og dermed med den samme tekstfil.
Formål
Eksemplet viser fire ting:
Hvordan en MCP-server kan køre i Docker.
Hvordan Docker kan få adgang til en fil på værtscomputeren.
Hvordan MCP-serveren kan tilgås via HTTP.
Hvordan flere AI-agenter kan arbejde med den samme fil.
Arkitekturen ser sådan ud:
flowchart LR
A["AI-agent<br>Computer A"]
B["AI-agent<br>Computer B"]
C["MCP testklient<br>Computer C"]
subgraph HOST["Computer med Docker"]
D["Docker container"]
M["MCP-server<br>port 3000 internt"]
F["shared.txt<br>på værtscomputeren"]
D --> M
M -->|"læser/skriver"| F
end
A -->|"MCP HTTP<br>port 3001"| M
B -->|"MCP HTTP<br>port 3001"| M
C -->|"MCP HTTP<br>port 3001"| MPå værtscomputeren bruger vi port:
3001Inde i Docker-containeren bruger MCP-serveren stadig:
3000Docker videresender derfor:
Computer:3001
↓
Docker:3000
↓
MCP-serverProjektstruktur
mcp-lan-file-server/
├── src/
│ ├── server.js
│ └── test-client.js
│
├── shared/
│ └── shared.txt
│
├── Dockerfile
├── docker-compose.yml
├── .env
├── .env.example
├── package.json
└── README.mdHvad kan MCP-serveren?
Serveren giver MCP-klienter adgang til en tekstfil.
Den har blandt andet disse tools:
read_text_file
write_text_file
append_text_fileEksempel:
En AI-agent kan spørge:
Læs indholdet af den delte tekstfil.Agenten kan derefter bruge:
read_text_fileDen kan også få besked på:
Tilføj "Hej fra computer 2" til filen.Så kan agenten bruge:
append_text_fileDen delte fil
Filen ligger i:
shared/shared.txtDet vigtige er, at filen ligger på værtscomputeren.
Den ligger ikke permanent inde i Docker-containeren.
Docker får adgang til mappen gennem et volume.
Hvad gør Docker?
Docker bruges til at isolere og afvikle MCP-serveren.
MCP-serveren får sit eget miljø med:
Node.js
MCP SDK
projektets dependencies
MCP-serverens kode
Det betyder, at andre computere ikke behøver at have MCP-serverens kode eller dependencies installeret.
De skal kun kunne kontakte MCP-serveren over netværket.
flowchart TD
H["Windows-computer"]
subgraph D["Docker"]
N["Node.js"]
S["MCP-server"]
N --> S
end
F["shared/shared.txt"]
H --> D
S -->|"Docker volume"| FDocker-containeren kan altså slettes og oprettes igen, uden at tekstfilen nødvendigvis forsvinder.
Docker volume
I docker-compose.yml bruges:
volumes:
- ./shared:/dataDet betyder:
På Windows Inde i Docker
./shared/ /data/
│ │
└── shared.txt <---------- ┘MCP-serveren arbejder eksempelvis med:
/data/shared.txtMen den virkelige fil ligger på computeren:
mcp-lan-file-server/shared/shared.txtHvis en AI-agent ændrer filen via MCP, kan du derfor åbne shared.txt direkte i WebStorm eller Windows og se ændringen.
Hvorfor Docker?
Vi kunne godt starte MCP-serveren direkte med:
node src/server.jsDocker giver dog nogle interessante fordele.
MCP-serveren bliver pakket sammen med:
Node.js
+
dependencies
+
serverkode
+
konfigurationDet giver denne arkitektur:
flowchart LR
A["Windows"]
B["Docker"]
C["MCP-server"]
D["shared.txt"]
A --> B
B --> C
C --> DMan kan derfor flytte MCP-serveren til en anden maskine med Docker uden først manuelt at installere hele miljøet.
Konfiguration
Opret en fil:
.envEksempel:
MCP_TOKEN=min-hemmelige-lan-token
ALLOWED_HOSTS=localhost,127.0.0.1Senere, når serveren skal bruges fra andre computere, tilføjer vi computerens lokale IP-adresse.
Eksempel:
MCP_TOKEN=min-hemmelige-lan-token
ALLOWED_HOSTS=localhost,127.0.0.1,192.168.0.37IP-adressen 192.168.0.37 er kun et eksempel.
Docker Compose
I docker-compose.yml skal port-konfigurationen være:
ports:
- "3001:3000"Det betyder:
Windows port 3001
↓
Docker port 3000
↓
MCP-serverStart serveren
Sørg først for, at Docker Desktop kører.
Åbn derefter terminalen i projektets rod:
docker compose up --buildDocker bygger nu imaget og starter MCP-serveren.
Du bør se noget i retning af:
MCP server startedStart serveren i baggrunden
Hvis du ikke ønsker at have terminalen åben:
docker compose up --build -d-d betyder:
detachedContaineren kører dermed i baggrunden.
Kontroller Docker-containeren
Kør:
docker compose psDu bør se noget i retning af:
NAME STATUS PORTS
mcp-lan-file-server Up 0.0.0.0:3001->3000/tcpDet vigtigste er:
3001->3000Det betyder, at port 3001 på computeren videresendes til port 3000 i Docker.
Test serveren
Inden vi tester MCP, tester vi først almindelig HTTP.
Kør:
curl.exe http://127.0.0.1:3001/healthServeren bør svare:
{
"status": "ok"
}Hvis dette virker, ved vi:
Windows
│
│ port 3001
↓
Docker
│
│ port 3000
↓
MCP-serverTest MCP-klienten
Sæt først adressen til MCP-serveren:
$env:MCP_URL="http://127.0.0.1:3001/mcp"Sæt derefter token:
$env:MCP_TOKEN="min-hemmelige-lan-token"Start klienten:
npm run clientKlienten forbinder nu til:
http://127.0.0.1:3001/mcpKommunikation mellem klient og server
sequenceDiagram
participant C as MCP-klient
participant D as Docker
participant M as MCP-server
participant F as shared.txt
C->>D: HTTP port 3001
D->>M: videresend til port 3000
C->>M: read_text_file
M->>F: readFile()
F-->>M: filens indhold
M-->>C: MCP-resultat
C->>M: append_text_file("Hej")
M->>F: appendFile("Hej")
M-->>C: OKFind computerens IP-adresse
Hvis andre computere på netværket skal bruge MCP-serveren, skal de kende IP-adressen på computeren, hvor Docker kører.
Kør:
ipconfigFind den aktive Wi-Fi- eller Ethernet-forbindelse.
Eksempel:
IPv4 Address . . . . . . . . . . : 192.168.0.37MCP-serveren vil så kunne tilgås på:
http://192.168.0.37:3001/mcpOpdater .env
Tilføj IP-adressen:
MCP_TOKEN=min-hemmelige-lan-token
ALLOWED_HOSTS=localhost,127.0.0.1,192.168.0.37Genstart Docker:
docker compose down
docker compose up --buildTest med computerens netværksadresse
På samme computer kan du nu prøve:
curl.exe http://192.168.0.37:3001/healthHvis serveren svarer:
{
"status": "ok"
}er næste trin at teste fra en anden computer.
Test fra en anden computer
Computer 2 skal være på samme lokale netværk.
Test først forbindelsen:
Test-NetConnection 192.168.0.37 -Port 3001Du ønsker:
TcpTestSucceeded : TrueHvis den viser:
TcpTestSucceeded : Falsekan Windows Firewall blokere forbindelsen.
Kør MCP-klienten fra computer 2
På computer 2:
$env:MCP_URL="http://192.168.0.37:3001/mcp"
$env:MCP_TOKEN="min-hemmelige-lan-token"
npm run clientComputer 2 kommunikerer nu med MCP-serveren, der kører i Docker på computer 1.
flowchart LR
C1["Computer 1<br>192.168.0.37"]
subgraph C1
D["Docker"]
M["MCP-server"]
F["shared.txt"]
D --> M
M --> F
end
C2["Computer 2<br>MCP-klient"]
C2 -->|"192.168.0.37:3001"| MFlere AI-agenter
En af de vigtigste pointer med dette eksempel er, at MCP-serveren ikke kun kan bruges af én klient.
Flere MCP-klienter eller AI-agenter kan kontakte samme server.
flowchart LR
A["AI-agent A"]
B["AI-agent B"]
C["AI-agent C"]
M["MCP-server<br>Docker"]
F["shared.txt"]
A -->|"MCP"| M
B -->|"MCP"| M
C -->|"MCP"| M
M --> FAlle tre arbejder dermed mod:
den samme MCP-serverog:
den samme shared.txtBevis at flere klienter bruger samme fil
Man kan lave et simpelt eksperiment.
Start først MCP-serveren:
docker compose up -dKlient 1
På computer 1:
$env:MCP_URL="http://127.0.0.1:3001/mcp"
$env:MCP_TOKEN="min-hemmelige-lan-token"
npm run clientLad eksempelvis klient 1 skrive:
Hej fra computer 1Filen indeholder nu:
Hej fra computer 1Klient 2
På computer 2:
$env:MCP_URL="http://192.168.0.37:3001/mcp"
$env:MCP_TOKEN="min-hemmelige-lan-token"
npm run clientKlient 2 kan nu læse:
Hej fra computer 1Klient 2 kan derefter tilføje:
Hej fra computer 2Kontroller filen
Åbn:
shared/shared.txtpå computer 1.
Nu bør den eksempelvis indeholde:
Hej fra computer 1
Hej fra computer 2Det viser:
Computer 1
│
└────────┐
↓
MCP-server
│
↓
shared.txt
↑
│
┌────────┘
│
Computer 2Begge klienter har altså arbejdet med den samme fil gennem MCP.
Eksempel med AI-agenter
Hvis en AI-agent understøtter en remote MCP-server, skal den forbindes til:
http://192.168.0.37:3001/mcpKonceptuelt kan konfigurationen ligne:
{
"mcpServers": {
"shared-files": {
"url": "http://192.168.0.37:3001/mcp",
"headers": {
"Authorization": "Bearer min-hemmelige-lan-token"
}
}
}
}Den præcise konfiguration afhænger af den MCP-klient eller AI-agent, der anvendes.
Eksempel på to AI-agenter
AI-agent på computer 1:
Læs den delte fil og tilføj:
Status fra agent A: Serveren virker.AI-agent på computer 2:
Læs den delte fil og tilføj:
Status fra agent B: Jeg kan også tilgå filen.shared.txt kunne derefter indeholde:
Status fra agent A: Serveren virker.
Status fra agent B: Jeg kan også tilgå filen.Dermed har vi et konkret bevis på, at flere AI-agenter kan bruge samme MCP-server.
Hvad sker der egentlig?
Når agenten siger:
Læs shared.txtsker der ikke dette:
AI-agent → shared.txtI stedet sker:
flowchart LR
A["AI-agent"]
M["MCP-server"]
F["shared.txt"]
A -->|"Kald MCP tool"| M
M -->|"Node.js fs"| F
F -->|"data"| M
M -->|"MCP-resultat"| AAI-agenten har altså ikke direkte adgang til filsystemet.
Det er MCP-serveren, der bestemmer, hvad agenten må gøre.
Hvorfor er det vigtigt?
MCP-serveren fungerer som et kontrolleret lag mellem AI og systemet.
I dette eksempel må AI-agenten eksempelvis:
læse shared.txt
skrive shared.txt
tilføje tekst til shared.txtMen AI-agenten får ikke automatisk adgang til:
C:\
Documents
Desktop
andre projekter
password-filer
hele filsystemetDet er MCP-serveren, som bestemmer grænserne.
MCP-serveren som fælles service
Vi kan derfor betragte MCP-serveren som en lille service:
flowchart TD
A["AI-agent"]
B["AI-agent"]
C["AI-agent"]
API["MCP-server"]
D["Filer"]
E["Database"]
F["API"]
G["Virksomhedssystem"]
A --> API
B --> API
C --> API
API --> D
API --> E
API --> F
API --> GI dette projekt bruger vi kun:
shared.txtMen samme princip kan senere bruges til:
database
GitHub
REST API
opgavestyring
studieadministration
interne systemer
logfiler
Hvorfor bruger vi ikke stdio?
En lokal MCP-server kan ofte startes med stdio.
Arkitekturen er typisk:
AI-klient
│
└── starter MCP-serveren
│
└── stdioDet fungerer godt, når serveren kun skal bruges på samme computer.
I dette projekt vil vi derimod have:
Computer A
Computer B
Computer C
│
↓
fælles MCP-serverDerfor bruger vi HTTP.
flowchart LR
A["Computer A"]
B["Computer B"]
C["Computer C"]
M["MCP-server<br>HTTP"]
A --> M
B --> M
C --> MSamlet arkitektur
flowchart LR
subgraph LAN["Lokalt netværk"]
A["Computer A<br>AI-agent"]
B["Computer B<br>AI-agent"]
C["Computer C<br>AI-agent"]
subgraph HOST["Servercomputer"]
P["Port 3001"]
subgraph DOCKER["Docker"]
M["MCP-server<br>port 3000"]
end
F["shared/shared.txt"]
P --> M
M -->|"Docker volume"| F
end
A -->|"MCP HTTP"| P
B -->|"MCP HTTP"| P
C -->|"MCP HTTP"| P
endStop serveren
Hvis serveren kører i terminalen:
Ctrl + CHvis den kører i baggrunden:
docker compose downSe Docker logs
Hvis noget ikke virker:
docker compose logsEller følg loggen løbende:
docker compose logs -fSe aktive containere
docker psEller specifikt for projektet:
docker compose psTypiske fejl
Related MCP server: High-Performance File System MCP Server
Port 3001 er allerede optaget
Hvis Docker viser:
Bind for 0.0.0.0:3001 failed: port is already allocatedkan du undersøge porten:
netstat -ano | findstr :3001Connection refused
Hvis klienten viser:
ECONNREFUSEDer MCP-serveren sandsynligvis ikke startet.
Kontroller:
docker compose psog:
curl.exe http://127.0.0.1:3001/healthAndre computere kan ikke forbinde
Test:
Test-NetConnection 192.168.0.37 -Port 3001Hvis:
TcpTestSucceeded : Falsekan problemet blandt andet være:
Windows Firewall
forkert IP-adresse
computeren er på et andet netværk
Docker-containeren kører ikke
port 3001 er ikke eksponeret
ALLOWED_HOSTSindeholder ikke serverens IP
Forslag til eksperiment
Eksperiment 1 – lokal klient
MCP-klient
↓
localhost:3001
↓
Docker
↓
shared.txtBevis:
Klienten kan læse og ændre filen.Eksperiment 2 – anden computer
Computer 2
↓
192.168.x.x:3001
↓
Docker på computer 1
↓
shared.txtBevis:
Computer 2 kan læse ændringer lavet på computer 1.Eksperiment 3 – to agenter
Agent A ─┐
├── MCP-server ── shared.txt
Agent B ─┘Lad agent A skrive:
Jeg er agent ALad agent B læse filen.
Hvis agent B kan se:
Jeg er agent Ahar vi bevist, at begge agenter bruger den samme MCP-server og samme datakilde.
Den centrale pointe
Docker giver os et isoleret miljø, hvor MCP-serveren kan køre.
Docker-volume giver MCP-serveren adgang til data på værtscomputeren.
HTTP gør MCP-serveren tilgængelig på netværket.
MCP bestemmer, hvilke handlinger AI-agenterne må udføre.
Det giver:
AI-agent
↓
MCP
↓
Docker
↓
kontrolleret adgang
↓
shared.txtFlere AI-agenter kan dermed bruge den samme MCP-server uden at få direkte adgang til værtscomputerens filsystem.
This server cannot be deployed
Maintenance
Related MCP Connectors
Persistent file storage for AI agents via MCP and curl. Upload, download, and version files.
One memory, every AI. A shared, user-owned markdown memory your AI clients read and write over MCP.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
- hiveWikiOAuthai.hivewiki
Shared project wiki for AI agents: read and write pages, next actions, and activity logs over MCP.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceZero-dependency MCP server that provides AI models with secure read/write/exec access to local files and directories over HTTP and SSE, designed to be tunneled via ngrok for integration with Claude Web.-
- FlicenseAqualityCmaintenanceA secure, Dockerized MCP server enabling AI assistants to perform file and directory CRUD operations like read, write, edit, search, and manage local files via natural language.11-
- AlicenseAqualityBmaintenanceEnables multiple local AI desktop applications to exchange MCP messages and collaborate through a shared JSONL room file, with role-based routing, history, and audit session tools.10MIT
- AlicenseNot gradedqualityBmaintenanceA local MCP server that enables AI agents to securely read, write, search, and edit JSON and Markdown files through a gated permission-scoped interface with configurable access modes.MIT