Linux MCP daemon (mcpd)
ใช้ทำอะไรได้
ยังไม่มีคำอธิบายภาษาไทย ดูข้อเท็จจริงด้านล่าง หรือเปิดคำอธิบายต้นฉบับจากผู้ทำ
- ต่อแบบ คลาวด์ (ต่อผ่านอินเทอร์เน็ต)
- บัญชีหรือคีย์ ต้องมี Authorization
- หมวด เครื่องมือนักพัฒนา
คำอธิบายต้นฉบับจากผู้ทำ (อังกฤษ)
AI agent access to Linux servers without SSH: scoped tools, per-call isolation, root only if grantedติดตั้ง
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
ผลตรวจผ่าน 3/3 · สิ่งที่คุณถามผ่านเซิร์ฟเวอร์ของผู้ทำ ({host}) · ✓ ตรวจคำสั่งแล้ว 13 พ.ย. 2569
ขั้นแรก: คุณใช้ AI ตัวไหน
เลือกแอปที่คุณใช้ ขั้นตอนจะขึ้นด้านล่าง
ต่อกับ Claude ได้ แต่ต้องเตรียมก่อน
ต้องมีคีย์ของ Linux MCP daemon (mcpd) (สร้างที่เว็บของผู้ทำ) · ที่อยู่มีส่วน {…} ที่ต้องแก้เป็นของคุณเองก่อน · ตั้งครั้งเดียวที่ claude.ai หรือแอปบนคอม แล้วใช้ในแชตได้ · บัญชีฟรีเพิ่มได้ 1 ตัว · แผน Team/Enterprise ให้เจ้าของ (Owner) เป็นคนเพิ่ม
สมัครและสร้างคีย์ของ Linux MCP daemon (mcpd)
เปิดเว็บของผู้ทำ สมัครบัญชีแล้วสร้างคีย์ (API key) เก็บไว้ ใช้ในขั้นถัดไป ราคาและแผนฟรีดูที่เว็บของผู้ทำ
เปิดหน้า Connectors ของ Claude
CustomizeConnectors
กด “Add” → “Custom” → “Web” แล้วกรอก 2 ช่องนี้
คัดลอกจากที่นี่ไปวางในช่องชื่อเดียวกันบนหน้าจอของ Claude แล้วกด Continue
Name · ชื่อLinux MCP daemon (mcpd)Remote MCP server URL · ที่อยู่https://{host}:9091/sseที่หัวข้อ Request headers เพิ่มชื่อและค่านี้
ชื่อ headerAuthorizationค่าBearer <วางคีย์ของคุณตรงนี้>วางคีย์ในช่องของแอปเท่านั้น อย่าวางในแชตหรือส่งให้ใคร
กด Continue ผ่านหน้าตรวจการล็อกอินที่ Claude ตรวจเจอ · หัวข้อ Authentication เลือกตามที่ผู้ทำบอก (Sign in now, Sign in when needed หรือ No sign in) แล้วกด Add
เปิดใช้ในแชต
+ConnectorsLinux MCP daemon (mcpd)
ลองเลย
ใช้ Linux MCP daemon (mcpd) บอกหน่อยว่าทำอะไรให้ฉันได้บ้าง แล้วลองทำให้ดูหนึ่งอย่าง✓ ถ้า Claude บอกว่ากำลังใช้ Linux MCP daemon (mcpd) หรือมีชื่อเครื่องมือของ Linux MCP daemon (mcpd) ขึ้นในคำตอบ แปลว่าต่อสำเร็จ
ชื่อเมนูตรวจกับหน้าช่วยเหลือของ Anthropic เมื่อ 11 พ.ย. 2569 · หน้าจอของคุณอาจต่างเล็กน้อยตามรุ่นของแอป
ChatGPT ยังต่อ Linux MCP daemon (mcpd) ไม่ได้
Linux MCP daemon (mcpd) ต้องใส่คีย์ส่วนตัวตอนต่อ แต่หน้าช่วยเหลือของ OpenAI พูดถึงแค่การเข้าสู่ระบบแบบ OAuth ยังไม่มีวิธีใส่คีย์ที่เราตรวจได้
คุณทำแบบนี้แทนได้
ก · ใช้แอปที่ต่อ Linux MCP daemon (mcpd) ได้
- ต้องมีคีย์ของ Linux MCP daemon (mcpd) (สร้างที่เว็บของผู้ทำ) · ที่อยู่มีส่วน {…} ที่ต้องแก้เป็นของคุณเองก่อน · ตั้งครั้งเดียวที่ claude.ai หรือแอปบนคอม แล้วใช้ในแชตได้ · บัญชีฟรีเพิ่มได้ 1 ตัว · แผน Team/Enterprise ให้เจ้าของ (Owner) เป็นคนเพิ่ม
- ต้องมีคีย์ของ Linux MCP daemon (mcpd) (สร้างที่เว็บของผู้ทำ) · ที่อยู่มีส่วน {…} ที่ต้องแก้เป็นของคุณเองก่อน
- ต้องมีคีย์ของ Linux MCP daemon (mcpd) (สร้างที่เว็บของผู้ทำ) · ที่อยู่มีส่วน {…} ที่ต้องแก้เป็นของคุณเองก่อน
- ต้องมีคีย์ของ Linux MCP daemon (mcpd) (สร้างที่เว็บของผู้ทำ) · ที่อยู่มีส่วน {…} ที่ต้องแก้เป็นของคุณเองก่อน
ข · ตัวอื่นในหมวด เครื่องมือนักพัฒนา ที่ต่อกับ ChatGPT ได้
เลือกจากตัวที่ใช้มากในหมวดเดียวกัน เฉพาะตัวที่ต่อด้วยที่อยู่ได้โดยไม่ต้องใส่คีย์
- Sentry✓ ChatGPT
- Compiler Explorer✓ ChatGPT
- GitDiagram✓ ChatGPT
ต่อกับ Claude Code ได้ แต่ต้องเตรียมก่อน
ต้องมีคีย์ของ Linux MCP daemon (mcpd) (สร้างที่เว็บของผู้ทำ) · ที่อยู่มีส่วน {…} ที่ต้องแก้เป็นของคุณเองก่อน
สมัครและสร้างคีย์ของ Linux MCP daemon (mcpd)
เปิดเว็บของผู้ทำ สมัครบัญชีแล้วสร้างคีย์ (API key) เก็บไว้ ใช้ในขั้นถัดไป ราคาและแผนฟรีดูที่เว็บของผู้ทำ
เปิด Terminal
Mac: กด Command+Space พิมพ์ Terminal · Windows: เปิด PowerShell
วางคำสั่งนี้แล้วกด Enter
claude mcp add --transport sse --scope user linux-daemon 'https://{host}:9091/sse' --header 'Authorization: Bearer ใส่ค่าของคุณ'แก้ “ใส่ค่าของคุณ” เป็นคีย์ของคุณก่อนกด Enter
วางคีย์ในช่องของแอปเท่านั้น อย่าวางในแชตหรือส่งให้ใคร
พิมพ์ /mcp ใน Claude Code
ต้องเห็น Linux MCP daemon (mcpd) ในรายการและขึ้นว่าเชื่อมต่อแล้ว
ลองเลย
ใช้ Linux MCP daemon (mcpd) บอกหน่อยว่าทำอะไรให้ฉันได้บ้าง แล้วลองทำให้ดูหนึ่งอย่าง✓ ถ้า Claude Code บอกว่ากำลังใช้ Linux MCP daemon (mcpd) หรือมีชื่อเครื่องมือของ Linux MCP daemon (mcpd) ขึ้นในคำตอบ แปลว่าต่อสำเร็จ
ชื่อเมนูตรวจกับหน้าช่วยเหลือของ Anthropic เมื่อ 11 พ.ย. 2569 · หน้าจอของคุณอาจต่างเล็กน้อยตามรุ่นของแอป
ต่อกับ Cursor ได้ แต่ต้องเตรียมก่อน
ต้องมีคีย์ของ Linux MCP daemon (mcpd) (สร้างที่เว็บของผู้ทำ) · ที่อยู่มีส่วน {…} ที่ต้องแก้เป็นของคุณเองก่อน
สมัครและสร้างคีย์ของ Linux MCP daemon (mcpd)
เปิดเว็บของผู้ทำ สมัครบัญชีแล้วสร้างคีย์ (API key) เก็บไว้ ใช้ในขั้นถัดไป ราคาและแผนฟรีดูที่เว็บของผู้ทำ
เปิดไฟล์ตั้งค่า MCP ของ Cursor
~/.cursor/mcp.json
วางค่าตั้งนี้ กรอกค่าที่ว่างไว้ แล้วบันทึกไฟล์
{ "mcpServers": { "linux-daemon": { "url": "https://{host}:9091/sse", "headers": { "Authorization": "Bearer ใส่ค่าของคุณ" } } } }ใส่คีย์ในช่องที่ว่างไว้
ในค่าตั้งของ Linux MCP daemon (mcpd) ช่อง Authorization ยังว่าง ใส่คีย์ของคุณแล้วบันทึก
วางคีย์ในช่องของแอปเท่านั้น อย่าวางในแชตหรือส่งให้ใคร
เปิดแชตของ AI ใน Cursor โหมด Agent
ลองเลย
ใช้ Linux MCP daemon (mcpd) บอกหน่อยว่าทำอะไรให้ฉันได้บ้าง แล้วลองทำให้ดูหนึ่งอย่าง✓ ถ้า Cursor บอกว่ากำลังใช้ Linux MCP daemon (mcpd) หรือมีชื่อเครื่องมือของ Linux MCP daemon (mcpd) ขึ้นในคำตอบ แปลว่าต่อสำเร็จ
ชื่อเมนูตรวจกับหน้าช่วยเหลือของ Cursor เมื่อ 11 พ.ย. 2569 · หน้าจอของคุณอาจต่างเล็กน้อยตามรุ่นของแอป
ต่อกับ VS Code ได้ แต่ต้องเตรียมก่อน
ต้องมีคีย์ของ Linux MCP daemon (mcpd) (สร้างที่เว็บของผู้ทำ) · ที่อยู่มีส่วน {…} ที่ต้องแก้เป็นของคุณเองก่อน
สมัครและสร้างคีย์ของ Linux MCP daemon (mcpd)
เปิดเว็บของผู้ทำ สมัครบัญชีแล้วสร้างคีย์ (API key) เก็บไว้ ใช้ในขั้นถัดไป ราคาและแผนฟรีดูที่เว็บของผู้ทำ
เปิดไฟล์ตั้งค่า MCP ของ VS Code
MCP: Open User Configuration
วางค่าตั้งนี้ กรอกค่าที่ว่างไว้ แล้วบันทึกไฟล์
{ "servers": { "linux-daemon": { "type": "sse", "url": "https://{host}:9091/sse", "headers": { "Authorization": "Bearer ใส่ค่าของคุณ" } } } }ใส่คีย์ในช่องที่ว่างไว้
ในค่าตั้งของ Linux MCP daemon (mcpd) ช่อง Authorization ยังว่าง ใส่คีย์ของคุณแล้วบันทึก
วางคีย์ในช่องของแอปเท่านั้น อย่าวางในแชตหรือส่งให้ใคร
เปิดแชตของ AI ใน VS Code โหมด Agent
ลองเลย
ใช้ Linux MCP daemon (mcpd) บอกหน่อยว่าทำอะไรให้ฉันได้บ้าง แล้วลองทำให้ดูหนึ่งอย่าง✓ ถ้า VS Code บอกว่ากำลังใช้ Linux MCP daemon (mcpd) หรือมีชื่อเครื่องมือของ Linux MCP daemon (mcpd) ขึ้นในคำตอบ แปลว่าต่อสำเร็จ
ชื่อเมนูตรวจกับหน้าช่วยเหลือของ VS Code เมื่อ 11 พ.ย. 2569 · หน้าจอของคุณอาจต่างเล็กน้อยตามรุ่นของแอป
โปรแกรมอื่นที่ใช้ MCP ได้ เช่น Windsurf, Zed หรือ Gemini CLI มีวิธีเพิ่มต่างกัน ดูวิธีของแต่ละตัวในหน้ารวมโปรแกรม
ที่อยู่สำหรับโปรแกรมที่ต่อผ่านเว็บ
https://{host}:9091/sseค่าตั้งแบบไฟล์ JSON อยู่ในหัวข้อ “สำหรับคนเขียนโค้ด” ด้านล่าง
สำหรับคนเขียนโค้ด: คำสั่ง Terminal และค่าตั้ง JSON
ต่อผ่านเว็บ
Claude Code
claude mcp add --transport sse --scope user linux-daemon 'https://{host}:9091/sse' --header 'Authorization: Bearer ใส่ค่าของคุณ'Cursor (~/.cursor/mcp.json)
{
"mcpServers": {
"linux-daemon": {
"url": "https://{host}:9091/sse",
"headers": {
"Authorization": "Bearer ใส่ค่าของคุณ"
}
}
}
}VS Code (mcp.json)
{
"servers": {
"linux-daemon": {
"type": "sse",
"url": "https://{host}:9091/sse",
"headers": {
"Authorization": "Bearer ใส่ค่าของคุณ"
}
}
}
}ค่าที่ต้องใส่เอง
- Bearer printed by `linuxctl create mcpd user`
ค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
สรุป
- ดาวน์โหลดต่อสัปดาห์i
- ไม่มียอดใน npm/PyPI
- การเชื่อมต่อ
- รันบนคลาวด์
- รุ่นล่าสุดi
- 0.5.1
- ส่งเข้า registryi
- 4 ต.ค. 2569
- แก้โค้ดล่าสุดi
- 4 ต.ค. 2569
- ผู้ทำ
- nucleusv
- เว็บผู้ทำ
- nucleusv.github.io
- สถานะใน registry
- ใช้งานอยู่
ใช้กับโปรแกรมไหนได้
ดูจากแบบการต่อของ server ตัวนี้ และเอกสารของผู้ทำโปรแกรมแต่ละตัว ตรวจเมื่อ 10 พ.ย. 2569
ต่อผ่านคลาวด์ได้ใน
ClaudeGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatOpen WebUIRaycast
คู่มือที่เกี่ยวข้อง
ทำอะไรได้บ้าง
ที่อยู่ต้องใส่ค่าของคุณเอง เราจึงอ่านรายการเครื่องมือแทนไม่ได้
ผลตรวจเบื้องต้นi
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 14 พ.ย. 2569
- ✓ ผ่าน
ตัวตนผู้ทำตรงกับ repo
ชื่อใน registry ยืนยันด้วยบัญชี GitHub nucleusv ซึ่งเป็นเจ้าของ repo
- ✓ ผ่าน
ยังมีคนดูแล
มีการแก้โค้ดล่าสุด 41 วันที่ผ่านมา
- ✓ ผ่าน
มีสัญญาอนุญาต (license)
ใช้ Apache-2.0
- – ไม่เกี่ยว
endpoint ตอบ
ต้องใส่ค่าของบัญชีคุณในที่อยู่ก่อน จึงตรวจแทนไม่ได้
- – ไม่เกี่ยว
ล็อกอินแบบ OAuth
ต้องใส่ค่าของบัญชีคุณในที่อยู่ก่อน จึงตรวจแทนไม่ได้
- … ยังไม่ตรวจ
คำอธิบายเครื่องมือไม่มีคำสั่งแอบแฝง
ยังไม่ได้ตรวจ เราอ่านรายการเครื่องมือตอนตรวจ endpoint
พูดคุย
ถาม แชร์เคล็ดลับ หรือแจ้งว่าใช้ไม่ได้ เรียงตามที่คนกดว่ามีประโยชน์
ยังไม่มีใครโพสต์ ถามหรือแชร์เป็นคนแรกได้เลย
ข้อความในส่วนนี้เขียนโดยผู้ใช้ ไม่ใช่ทีม PopNx
รีวิวจากผู้ใช้
ยังไม่มีรีวิว
เทียบกับตัวอื่นในหมวด เครื่องมือนักพัฒนาi
- ดาวมากกว่า 88% ของอีก 5853 ตัวในหมวดนี้
- ส่งรุ่นใหม่เข้า registry ล่าสุดกว่า 45% ของอีก 5853 ตัวในหมวดนี้
- ผลตรวจเบื้องต้นดีกว่าหรือเท่ากับ 100% ของอีก 5853 ตัวในหมวดนี้
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
คำถามที่พบบ่อย
Linux MCP daemon (mcpd) ปลอดภัยไหม?
จากการตรวจเบื้องต้นของเรา ผ่าน 3 จาก 3 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
ต้องใช้กุญแจหรือรหัสอะไรบ้าง?
ต้องใส่ค่าเหล่านี้: Authorization
ตัวนี้รันบนเครื่องหรือบนคลาวด์?
รันบนคลาวด์ของผู้ทำ ต่อผ่านอินเทอร์เน็ตได้เลย ไม่ต้องลงโปรแกรม แต่ข้อมูลที่ส่งให้จะผ่านเซิร์ฟเวอร์ของผู้ทำ
ยังมีคนดูแลอยู่ไหม?
repo บน GitHub มีการแก้โค้ดล่าสุด 41 วันที่ผ่านมา และส่งรุ่นล่าสุด (0.5.1) เข้า registry 41 วันที่ผ่านมา
ใช้กับโปรแกรมไหนได้บ้าง?
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต่อผ่าน URL จึงใช้กับโปรแกรมที่รับ remote MCP ได้ เช่น ChatGPT บนเว็บ (แบบเต็มในแผน Business ขึ้นไป · Pro แบบอ่านอย่างเดียว)
ตัวอื่นในหมวดเดียวกัน
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:↓ ดาวน์โหลดต่อสัปดาห์i★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
Serena MCP: the IDE for your agent
A powerful toolkit for coding, providing semantic retrieval and editing capabilities.
README จากผู้ทำ
เปิดอ่าน README
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
Linux MCP Daemon
A high-performance, Go-based Model Context Protocol (MCP) daemon (mcpd) designed to securely bridge AI agents directly with the Linux operating system.
Overview
This project implements a zero-dependency (kernel-first) philosophy. It allows AI agents to introspect and interact with the host Linux system directly via raw syscalls and the Virtual File System (/proc, /sys) without requiring bloated third-party parsing libraries.
Communication happens directly between the AI agent and the daemon via Server-Sent Events (SSE) and JSON-RPC over HTTPS on port 9091 (TLS is on by default, with a self-signed certificate generated on first start).
Why
An AI agent that helps run a server needs to see it - load, memory, disks, processes, services, logs, the network - and sometimes to act on it. The usual way is an SSH shell, and a shell is everything at once: any command, any file the account can reach, with sudo all of root, and hard to tell afterwards what was done. mcpd gives the agent typed tools instead of a shell:
- Diagnose without a shell. "Why is the site slow?" -
processes/top,memory/usage,disks/usage,logs/journal-control,logs/dmesg,network/connections,services/listanswer it, with structured output (json/yaml) the agent doesn't have to scrape fromtopordf. - Root per tool, not per session. A user runs every tool as its own OS account; root is granted per tool in
mcp-sudo.yamland limited by paths, network destinations and sysctl keys - "may read/var/logas root and restart services" rather than "is root". - One agent, one account, one token. Each agent gets its own user, and every call is logged with the user, tool, arguments (secrets redacted) and result - an audit trail of what the agent did.
- Small and self-contained. One static Go binary, reading
/proc,/sysand systemd over D-Bus itself; it runs on a bare host, in Docker or in Kubernetes, andlinuxctlgives people the same tools as a kubectl-like CLI.
Grant carefully. A root grant is root for an agent that follows instructions found in what it reads. Some grants that look narrow are full root (writes to
/etc,services/manage, sysctl writes). Read Permissions and Risks before granting anything.
How It Works
- Every tool/resource call spawns a fresh worker process and exits. There's no long-lived state per call -
internal/worker/spawner.gore-execs themcpdbinary itself inworkermode (arguments on stdin, never argv), withsyscall.Credential{Uid, Gid, Groups}set to a real OS account resolved viauser.Lookup(). This is the actual privilege isolation, not a config flag: an unprivileged user's worker process is a genuinely different Linux UID than a privileged one's. - `configs/mcp-sudo.yaml` decides, per user and per tool, whether `privileged: true` is honored. Two grants exist for resources specifically (see
ARCHITECTURE.md's gotcha section) - one for the resource URI itself, one for the internal worker tool name behind it. - When `mcpd` runs containerized (
configs/daemon.yaml'sworker.containerized: true, this project's actual Kubernetes deployment), a privileged worker also joins the real host's mount namespace (setns(CLONE_NEWNS)on/proc/1/ns/mnt, no externalnsenterbinary) - soprivileged: truemeans root on the real host, not just root inside the daemon's own container image. - Bearer tokens are salted+hashed in
users.yaml(token_salt+token_hash,sha256, constant-time compared; the file is0600), not stored in plaintext. Users and grants are edited only locally, on the host, vialinuxctl mcpd userandlinuxctl edit mcpd config(validated likevisudo) - there is no MCP tool that edits them, so nothing with just a bearer token can grant itself anything. The running daemon applies changes without a restart throughdaemon/reload-config, which only re-reads the files and rejects invalid ones (see Daemon User Administration). - Every read is schema-driven, not hand-listed.
linuxctlfetchestools/list/resources/list/resources/templates/listfrom the live daemon on every invocation and resolves its[keyword]grammar against that - a new tool added server-side is immediately usable client-side with zero code changes.
Features
- Direct AI Interaction: HTTP/SSE transport for immediate agent-to-daemon communication.
- Strict Security: Rate limiting, salted+hashed Bearer token authentication, and directory traversal protection.
- Privilege Separation: Master daemon runs as root, spinning up ephemeral unprivileged/privileged workers based on rules defined in
configs/mcp-sudo.yaml. - High Performance: Uses
singleflightdeduplication and TTL caching for efficient system introspection. - Docker & Kubernetes Ready: Fully containerized with a multi-stage Docker build and Kubernetes deployment manifests that allow safe host introspection.
Get started
Install on Linux (systemd)
curl -fsSL https://raw.githubusercontent.com/nucleusv/linux-mcp-daemon/main/scripts/install.sh | sudo bash
Needs sudo and curl on an amd64/arm64 host (in a bare ubuntu/debian container: apt update && apt install -y curl ca-certificates, then pipe to bash as root). This downloads the latest release for your architecture (amd64/arm64), verifies its sha256 checksum, installs mcpd and linuxctl to /usr/local/bin, writes clean configs to /etc/mcpd/configs (no default users or tokens), creates a first user mcp and prints its token once, and starts the mcpd systemd service. Then:
export MCP_SERVER=https://127.0.0.1:9091
export MCP_TLS_FINGERPRINT= export MCP_TOKEN= linuxctl get system os-release linuxctl get processes top
- Upgrade: run the same command again - configs are kept, the service restarts only if
mcpdchanged. From v0.1.0, grant your first userdaemon/reload-configonce - see Upgrading. - Pin a version / name the user:
... | sudo bash -s -- --version v0.1.0 --user alice - More users: each needs an OS account of the same name - see Adding more users.
- Uninstall:
... | sudo bash -s -- --uninstall(add--purgeto delete/etc/mcpd; themcpOS account stays -sudo userdel -r mcp) - Packages:
.deband.rpmfor amd64/arm64 on every release -sudo apt install ./linux-mcp-daemon_ _amd64.deborsudo dnf install ./linux-mcp-daemon- -1.x86_64.rpm, then the next steps it prints. - Container image:
ghcr.io/nucleusv/linux-mcp-daemon(amd64/arm64) - setup steps in the installation docs. - macOS (CLI only): the same script installs just
linuxctl-curl -fsSL .../install.sh | bash -s -- --bin-dir ~/.local/bin, thenexport PATH="$HOME/.local/bin:$PATH"(not on macOS's default PATH) - to drive a remote mcpd.
mcpd listens on all interfaces over TLS (a self-signed certificate it creates on first start; clients pin its fingerprint). Plain HTTP is off by default - bearer tokens would travel in clear text. Root access for tools is granted per user and per tool in
mcp-sudo.yaml.
Full guide: Installation · Connect an AI agent · mcp-sudo.yaml
Development: build from source
1. Build and Deploy the Server (mcpd)
- Build the Docker image:
./scripts/build.sh
- Deploy to your local Kubernetes cluster:
./scripts/deploy.sh
2. Build the Client (linuxctl)
You can build the CLI client directly on your host machine (e.g. macOS):
./scripts/build-cli.sh # writes executables/linuxctl
export PATH="$PWD/executables:$PATH" # so the examples below run as written
Installed from a release (install.sh, .deb/.rpm), linuxctl is already on your PATH.
3. Usage (local development)
The daemon runs on port 9091. You can connect via your AI client using SSE, or use the linuxctl CLI tool:
# Set your token as an environment variable
export MCP_TOKEN="your_token_here"
Ping the daemon
linuxctl ping
linuxctl speaks a small verb/group grammar (linuxctl [target-keyword] [args]) and dynamically discovers every tool and resource from the running daemon - there's no separate client-side command list to keep in sync. Full reference: linuxctl docs or man linuxctl. Every example below shows both forms: linuxctl, and the raw MCP JSON-RPC curl call it resolves to - the full per-tool/resource reference with these side by side for every single one lives at MCP API docs.
Calling the API directly with curl
mcpd speaks JSON-RPC 2.0 over HTTP + SSE, not plain request/response HTTP - every call is a two-step handshake: open an SSE stream to get a one-time POST endpoint, then POST the JSON-RPC request there (the actual result streams back on the SSE connection, not in the POST's response body):
# 1. Open the SSE stream in the background and capture the endpoint it prints
curl -N -s --cacert mcpd.crt -H "Authorization: Bearer $MCP_TOKEN" https://localhost:9091/sse &
server sends: event: endpoint / data: /message?session_id=...
2. POST a request to that endpoint
curl -s --cacert mcpd.crt -X POST "https://localhost:9091/message?session_id= " \ -H "Authorization: Bearer $MCP_TOKEN" \ -H "Content-Type: application/json" \ -d '{"jsonrpc": "2.0", "id": "1", "method": "tools/list"}'
3. Watch the SSE stream from step 1 for the matching "id": "1" response
Every example below follows this exact pattern - only the -d payload changes.
Files
# List a directory, as a table (get is the sole read verb - one result or many, same as kubectl)
$ linuxctl get files list /var/log --output table MODIFIED NAME SIZE IS_DIR 2026-09-22 18:38:14 alternatives.log 6522 false 2026-09-22 18:38:10 apt 4096 true ...
```bash
curl -s -X POST "$END