Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
MCP server for timepicker-ui: options, events, themes, public API, snippets and time validation.
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
ต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"timepicker-ui": {
"command": "npx",
"args": [
"-y",
"timepicker-ui-mcp"
]
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add timepicker-ui -- npx -y timepicker-ui-mcpวางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"timepicker-ui": {
"command": "npx",
"args": [
"-y",
"timepicker-ui-mcp"
]
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"timepicker-ui": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"timepicker-ui-mcp"
]
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
ค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 7 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub pglejzer ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (2.1.0) เข้า registry 18 วันที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Node.js ในเครื่องด้วย
ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, Python MCP
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.
Local-only Python MCP server for the Files.com API.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
A time picker for web forms. Attach it to an and users pick a time on a clock face or a scroll wheel.
Live demo · Documentation · Changelog · React wrapper
window or document on import, so it's safe in Next.js, Nuxt and other SSR setups.labels.HH:MM:SS) in the clock, wheel and compact wheelclock.isTimeDisabled)npm install timepicker-ui
<input id="timepicker" type="text" />
import { TimepickerUI } from "timepicker-ui";
import "timepicker-ui/main.css";
const input = document.querySelector("#timepicker"); const picker = new TimepickerUI(input, { clock: { type: "24h" }, ui: { theme: "dark" }, callbacks: { onConfirm: (data) => console.log("Selected:", data), }, }); picker.create();
No global CSS reset is needed: the picker sets box-sizing: border-box on its own elements (details).
picker.create(); // render the picker and attach it to the input
picker.open(); picker.close(); picker.destroy(); picker.getValue(); // { hour, minutes, seconds, type, time }, seconds only with clock.showSeconds picker.setValue("14:30"); // "2:30 PM" works too picker.setValue("14:30:15"); // with clock.showSeconds picker.setOptions({ ui: { theme: "crane" } }); picker.setRange({ from: "09:00", to: "17:00" }); // needs RangePlugin picker.getRange(); picker.setActivePart("to"); picker.refreshDisabledTime(); // after the data behind clock.isTimeDisabled changes
const off = picker.on("confirm", (data) => {}); // on() and once() return a function that removes the handler off(); picker.on("confirm", (data) => {}); picker.on("cancel", (data) => {}); picker.on("open", () => {}); picker.on("update", (data) => {}); picker.on("clear", (data) => {}); picker.on("error", (data) => {}); picker.once("confirm", handler); picker.off("confirm", handler);
TimepickerUI.getById("my-id"); TimepickerUI.getAllInstances(); TimepickerUI.isAvailable("#timepicker"); TimepickerUI.destroyAll();
Grouped by area. Pass only what you need, the rest has defaults (full list).
new TimepickerUI(input, {
clock: { type: "12h" | "24h" | "auto", // default "12h"; "auto" follows the browser locale incrementHours: 1, incrementMinutes: 1, showSeconds: false, // true adds seconds (HH:MM:SS) incrementSeconds: 1, disabledTime: { hours: [], minutes: [], seconds: [], ranges: "" }, isTimeDisabled: ({ hour, minutes, seconds }) => false, // hour is 0-23 defaultTime: "now" | { time, updateInput }, }, ui: { theme: "basic" | "dark" | "m3-green" | "crane" | "blueprint" | ..., mode: "clock" | "wheel" | "compact-wheel", // default "clock" animation: true, backdrop: true, initialView: "clock", // or "keyboard" editable: false, inline: { enabled: false, container: "#picker" | element, showButtons: false, autoUpdate: false, embedded: false }, clearButton: false, // or { clearInput: false } to keep the input value on Clear cssClass: "", }, labels: { am, pm, ok, cancel, clear, clockTitle, hour, minute, second, rangeFrom, rangeTo, timezone, ... }, behavior: { focusTrap: true, returnFocus: false, delayHandler: 0, id: "" }, callbacks: { onConfirm, onCancel, onOpen, onUpdate, onSelectHour, onSelectMinute, onSelectSecond, onSelectPeriod, onClear, onError, ... }, wheel: { placement: "auto" | "top" | "bottom", hideFooter: false, commitOnScroll: false, hideDisabled: false, ignoreOutsideClick: false }, range: { enabled: false, linked: true, minDuration, maxDuration }, timezone: { enabled: false, default, list }, });
Preview all of them: basic, crane, crane-straight, m3-green, m2, dark, glassmorphic, pastel, ai, cyberpunk, blueprint, blueprint-dark.
main.css is required and already includes basic. The rest are separate files:
import "timepicker-ui/main.css";
import "timepicker-ui/theme-dark.css";
new TimepickerUI(input, { ui: { theme: "dark" } });
Or import timepicker-ui/index.css to get all of them. Writing your own theme: styling guide.
Range, timezone and wheel ship as separate imports. Register them once before creating pickers. You need WheelPlugin for the wheel and compact-wheel modes.
import { TimepickerUI, PluginRegistry } from "timepicker-ui";
import { RangePlugin } from "timepicker-ui/plugins/range"; import { TimezonePlugin } from "timepicker-ui/plugins/timezone"; import { WheelPlugin } from "timepicker-ui/plugins/wheel";
PluginRegistry.register(RangePlugin); PluginRegistry.register(TimezonePlugin); PluginRegistry.register(WheelPlugin);
new TimepickerUI(input, { range: { enabled: true } });
From 4.5 nothing breaks. 4.6 adds ui.inline.embedded, range.linked, clock.isTimeDisabled with refreshDisabledTime(), the setRange() / getRange() / setActivePart() methods, and a remover returned by on() / once(). See the CHANGELOG.
From 4.4, 4.5 adds optional seconds (clock.showSeconds) and fixes many bugs. It also renames many options to clearer names, for example ui.initialView instead of ui.mobile, and adds setOptions() in place of update(). The old names keep working until 5.0, and the options page lists every pair. A few changes can affect an existing setup: the AM/PM part of the value is always AM / PM whatever labels.am / labels.pm say, out-of-range clock.disabledTime.ranges edges such as 25:00 are reported as errors, the old .tp-ui-ripple classes are gone, and some focus-ring and radius tokens changed. The CHANGELOG lists them under "Check before upgrading".
From 4.3 nothing breaks. 4.4 adds the blueprint and blueprint-dark themes, 16 new labels.* for screen-reader text, and Home/End/PageUp/PageDown keys. See the CHANGELOG.
From 3.x, options are now grouped (clock, ui, labels, ...), events go through picker.on(), and CSS class names changed. There's a migration guide.
From 2.x, you have to import the CSS yourself and some event names changed (legacy guide).
React:
import { useEffect, useRef } from "react";
import { TimepickerUI } from "timepicker-ui"; import "timepicker-ui/main.css";
function TimePicker() { const ref = useRef (null); useEffect(() => { if (!ref.current) return; const picker = new TimepickerUI(ref.current); picker.create(); return () => picker.destroy(); }, []); return ; }
There's also a React wrapper (docs). Vue and Angular examples are in the quick start docs.
datepicker-ui is the companion calendar from the same author. It has no dependencies, follows Material Design 3, is safe to import during server rendering and uses the same theme names, so the two pickers match. It covers single dates, ranges and multiple dates.
npm install @pglejzer/datepicker-ui
The date and time guide shows how to use both pickers in one form.
5.0.0 is planned but has no release date yet. 4.5.0 prepares for it. Planned changes:
PluginRegistry.register(...) and the exported plugin types (PluginRegistry, Plugin, PluginManager, PluginFactory, TemplateProvider, ClearHandler, CoreState, EventEmitter) will change. The built-in range, timezone and wheel plugins stay. A migration guide ships with 5.0.tp-ui- prefix, but the part after it is reworked to follow Material Design component naming. Custom CSS that targets these classes will need updating. 5.0 ships a table of old and new names.ui.mobile (now ui.initialView) and clock.smoothHourSnap (now clock.discreteHourJump). The options page lists every pair. The select:am / select:pm events go too (use select:period), and so does update() (use setOptions()).behavior.returnFocus becomes true by default: on close, focus goes back to the input, or to the data-open element that opened the picker. Set behavior.returnFocus: true now to return focus to the input.ตัดมาแค่ช่วงต้น อ่านต่อใน repo