Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
A Model Context Protocol (MCP) server for Uptime Kuma version 2.
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
UPTIME_KUMA_URL, UPTIME_KUMA_USERNAME, UPTIME_KUMA_PASSWORD, UPTIME_KUMA_2FA_TOKEN, UPTIME_KUMA_JWT_TOKEN, UPTIME_KUMA_HEADERSค่าที่ติดป้ายความลับคือกุญแจของบัญชีคุณ อย่าส่งให้ใคร และอย่าวางในแชต
ต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"uptime-kuma": {
"command": "npx",
"args": [
"-y",
"@davidfuchs/mcp-uptime-kuma"
],
"env": {
"UPTIME_KUMA_URL": "ใส่ค่าของคุณ",
"UPTIME_KUMA_USERNAME": "ใส่ค่าของคุณ",
"UPTIME_KUMA_PASSWORD": "ใส่ค่าของคุณ",
"UPTIME_KUMA_2FA_TOKEN": "ใส่ค่าของคุณ",
"UPTIME_KUMA_JWT_TOKEN": "ใส่ค่าของคุณ",
"UPTIME_KUMA_HEADERS": "ใส่ค่าของคุณ"
}
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add uptime-kuma --env UPTIME_KUMA_URL='ใส่ค่าของคุณ' --env UPTIME_KUMA_USERNAME='ใส่ค่าของคุณ' --env UPTIME_KUMA_PASSWORD='ใส่ค่าของคุณ' --env UPTIME_KUMA_2FA_TOKEN='ใส่ค่าของคุณ' --env UPTIME_KUMA_JWT_TOKEN='ใส่ค่าของคุณ' --env UPTIME_KUMA_HEADERS='ใส่ค่าของคุณ' -- npx -y @davidfuchs/mcp-uptime-kumaเติมค่าที่เว้นว่างไว้ก่อนรัน
วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"uptime-kuma": {
"command": "npx",
"args": [
"-y",
"@davidfuchs/mcp-uptime-kuma"
],
"env": {
"UPTIME_KUMA_URL": "ใส่ค่าของคุณ",
"UPTIME_KUMA_USERNAME": "ใส่ค่าของคุณ",
"UPTIME_KUMA_PASSWORD": "ใส่ค่าของคุณ",
"UPTIME_KUMA_2FA_TOKEN": "ใส่ค่าของคุณ",
"UPTIME_KUMA_JWT_TOKEN": "ใส่ค่าของคุณ",
"UPTIME_KUMA_HEADERS": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"uptime-kuma": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@davidfuchs/mcp-uptime-kuma"
],
"env": {
"UPTIME_KUMA_URL": "ใส่ค่าของคุณ",
"UPTIME_KUMA_USERNAME": "ใส่ค่าของคุณ",
"UPTIME_KUMA_PASSWORD": "ใส่ค่าของคุณ",
"UPTIME_KUMA_2FA_TOKEN": "ใส่ค่าของคุณ",
"UPTIME_KUMA_JWT_TOKEN": "ใส่ค่าของคุณ",
"UPTIME_KUMA_HEADERS": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
UPTIME_KUMA_USERNAME envค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 7 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub DavidFuchs ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
ต้องใส่ค่าเหล่านี้: UPTIME_KUMA_URL, UPTIME_KUMA_PASSWORD, UPTIME_KUMA_2FA_TOKEN, UPTIME_KUMA_JWT_TOKEN, UPTIME_KUMA_HEADERS
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (0.12.1) เข้า registry 18 วันที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Node.js ในเครื่องด้วย
ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, Dialyne
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Real phone calls in France for AI agents: dial +33 numbers, menus, hold, AI disclosure.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
A Model Context Protocol (MCP) server for Uptime Kuma *version 2*. Supports stdio and streamable HTTP transports.
Add this to your MCP client configuration:
{
"mcpServers": { "uptime-kuma": { "command": "npx", "args": ["-y", "@davidfuchs/mcp-uptime-kuma@latest"], "env": { "UPTIME_KUMA_URL": "http://your-uptime-kuma-instance:3001", "UPTIME_KUMA_USERNAME": "your_username", "UPTIME_KUMA_PASSWORD": "your_password" } } } }
Keep the @latest suffix. Without it, npx reuses whatever version it cached the first time it ran and never picks up new releases.
Option 1: Docker Run
docker run -d \
--name mcp-uptime-kuma \ -p 3000:3000 \ -e UPTIME_KUMA_URL=http://your-uptime-kuma-instance:3001 \ -e UPTIME_KUMA_USERNAME=your_username \ -e UPTIME_KUMA_PASSWORD=your_password \ davidfuchs/mcp-uptime-kuma:latest \ -t streamable-http
Option 2: Docker Compose
A docker-compose.yml file is provided in the repository. Download it, configure your environment variables, and run:
docker compose up -d
Then configure your MCP client to connect to the endpoint:
{
"mcpServers": { "uptime-kuma": { "url": "http://localhost:3000/mcp" } } }
See Authentication Methods for JWT token and anonymous authentication options.
The endpoint above is unauthenticated. Anyone who can reach port 3000 gets full
read/write control of your Uptime Kuma instance. See
Securing the HTTP Endpoint before exposing it beyond localhost.
*Conversation in LibreChat where the mcp-uptime-kuma server is providing real-time information from Uptime Kuma.*
| Tool | Purpose |
|---|---|
getMonitorSummary | Get a quick overview of all monitors with their current status. Supports filtering. |
listMonitors | Get the full list of all monitors with configurations. Supports filtering. |
listMonitorTypes | Get all available monitor types supported by Uptime Kuma. |
getMonitor | Get detailed configuration for a specific monitor by ID. |
createMonitor | Create a new monitor (requires name and type at minimum). |
updateMonitor | Update an existing monitor's configuration. |
deleteMonitor | Permanently delete a monitor and all its heartbeat history. |
pauseMonitor | Pause a monitor to stop performing checks. |
resumeMonitor | Resume a paused monitor to restart checks. |
| Tool | Purpose |
|---|---|
listHeartbeats | Get status check history for all monitors. |
getHeartbeats | Get status check history for a specific monitor. |
| Tool | Purpose |
|---|---|
listNotifications | List all configured notification channels (Slack, Discord, email, webhooks, etc.). |
addNotification | Create a new notification channel. |
updateNotification | Update an existing notification channel. |
deleteNotification | Permanently delete a notification channel. |
| Tool | Purpose |
|---|---|
listTags | List all tags defined in Uptime Kuma. |
addTag | Create a new tag that can be assigned to monitors. |
deleteTag | Permanently delete a tag (removes it from all monitors). |
| Tool | Purpose |
|---|---|
getMaintenanceWindows | List all maintenance windows, with the monitors each one covers. |
createMaintenance | Schedule a new maintenance window and attach the monitors it suppresses. |
updateMaintenance | Change a maintenance window's schedule, details, or monitor list. |
pauseMaintenance | Switch a maintenance window off (ends a manual window). |
resumeMaintenance | Switch a paused maintenance window back on (starts a manual window). |
deleteMaintenance | Permanently delete a maintenance window. |
| Tool | Purpose |
|---|---|
listStatusPages | List all configured status pages. |
getSettings | Get Uptime Kuma server settings. |
getMonitorSummary and listMonitors support filtering by:
"http", "http,ping,dns")true) or inactive (false) monitors"production", "env=staging")null for top-level monitors (those with no parent). Not recursive — to walk deeper, use each child group's own childrenIDs."0"=DOWN, "1"=UP, "2"=PENDING, "3"=MAINTENANCE)Examples:
getMonitorSummary({ status: "0" }) // All DOWN monitors
getMonitorSummary({ type: "http", maintenance: true }) // HTTP monitors in maintenance getMonitorSummary({ parentId: 12, status: "0" }) // What's down inside group 12 listMonitors({ tags: "production,region=us-east" }) // Monitors with specific tags listMonitors({ parentId: 12 }) // Direct children of group 12 listMonitors({ parentId: null }) // Top-level monitors only
If authentication is disabled on your Uptime Kuma instance, only UPTIME_KUMA_URL is required.
UPTIME_KUMA_URL=http://your-instance:3001
UPTIME_KUMA_USERNAME=your_username UPTIME_KUMA_PASSWORD=your_password UPTIME_KUMA_2FA_TOKEN=123456 # Optional, only if 2FA is enabled
Recommended for 2FA users. Takes precedence over username/password if both are provided.
UPTIME_KUMA_URL=http://your-instance:3001
UPTIME_KUMA_JWT_TOKEN=your_jwt_token
Using the CLI utility (recommended):
npx -p @davidfuchs/mcp-uptime-kuma@latest mcp-uptime-kuma-get-jwt http://localhost:3001 admin mypassword
Using Docker:
docker run --rm davidfuchs/mcp-uptime-kuma:latest get-jwt http://host.docker.internal:3001 admin mypassword
From browser: Open Developer Tools → Storage/Application → Local Storage → find token key.
If Uptime Kuma sits behind a proxy that demands its own credentials — a Cloudflare Zero Trust Access application, oauth2-proxy, an API gateway — set UPTIME_KUMA_HEADERS to a JSON object of headers to send on every request. It combines with any of the methods above, which still handle logging in to Uptime Kuma itself.
For Cloudflare Access, create a service token, add a *Service Auth* policy to the application that allows it, then:
UPTIME_KUMA_URL=https://uptime.example.com
UPTIME_KUMA_HEADERS={"CF-Access-Client-Id":" .access","CF-Access-Client-Secret":" "} UPTIME_KUMA_USERNAME=your_username UPTIME_KUMA_PASSWORD=your_password
In an MCP client's JSON config the value is a string, so the inner quotes need escaping:
"UPTIME_KUMA_HEADERS": "{\"CF-Access-Client-Id\":\"<client-id>.access\",\"CF-Access-Client-Secret\":\"<client-secret>\"}"
mcp-uptime-kuma-get-jwt reads the same variable. A malformed value stops the server at startup with an error naming the offending header; header values are never logged.
Applies to -t streamable-http only. The stdio transport has no listener to protect and takes its credentials from the environment, as the MCP specification prescribes.
Anyone who can reach /mcp has full read/write control of your Uptime Kuma instance, including deleting monitors. Two settings guard it, and both default to permissive so that upgrading cannot break an existing deployment - the server warns at startup in that state.
| Variable | Default | Purpose |
|---|---|---|
MCP_AUTH_TOKEN | unset (no authentication) | Shared secret that callers must present as Authorization: Bearer . Anything else gets 401. |
ALLOWED_ORIGIN | * (no validation) | Comma-separated list of browser origins permitted to call /mcp. A request whose Origin is not listed gets 403. Requests with no Origin header (every native MCP client) are always allowed. |
HOST | 0.0.0.0 | Address to bind. Set to 127.0.0.1 when running locally outside a container. |
PORT | 3000 | Port to listen on. |
TRUST_PROXY | unset (no trust) | Trust X-Forwarded-For from a reverse proxy in front of the server, so the rate limiter keys on the real client IP instead of the proxy's. Accepts a hop count (1), true/false, or an IP/subnet list - see Express's trust proxy docs. |
/health is deliberately left unauthenticated so container healthchecks and load balancer probes keep working. It reports nothing but liveness.
Generate a high-entropy secret - this is a password, and it is compared in constant time, so length is the only thing protecting it:
openssl rand -base64 32
docker run -d \
--name mcp-uptime-kuma \ -p 3000:3000 \ -e UPTIME_KUMA_URL=http://your-uptime-kuma-instance:3001 \ -e UPTIME_KUMA_JWT_TOKEN=your_jwt_token \ -e MCP_AUTH_TOKEN=your_generated_secret \ davidfuchs/mcp-uptime-kuma:latest \ -t streamable-http
Clients then send it as a header:
{
"mcpServers": { "uptime-kuma": { "url": "http://localhost:3000/mcp", "headers": { "Authorization": "Bearer your_generated_secret" } } } }
Origin validation matters separatelyA shared secret stops anyone who cannot present it. It does not stop a website your browser already trusts. Under a DNS rebinding attack a page on evil.example resolves its own hostname
ตัดมาแค่ช่วงต้น อ่านต่อใน repo