Agent-Native Calendar
Agent-Native Google Calendar - manage events, sync, and public booking
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
Query a verified document collection: passages that answer a question, with their source.
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
MDCX_FILE, MDCX_KEYค่าที่ติดป้ายความลับคือกุญแจของบัญชีคุณ อย่าส่งให้ใคร และอย่าวางในแชต
ต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"mdcx": {
"command": "uvx",
"args": [
"mdcx",
"-m",
"mdcx.mcp_server"
],
"env": {
"MDCX_FILE": "ใส่ค่าของคุณ",
"MDCX_KEY": "ใส่ค่าของคุณ"
}
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add mdcx --env MDCX_FILE='ใส่ค่าของคุณ' --env MDCX_KEY='ใส่ค่าของคุณ' -- uvx mdcx -m mdcx.mcp_serverเติมค่าที่เว้นว่างไว้ก่อนรัน
วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"mdcx": {
"command": "uvx",
"args": [
"mdcx",
"-m",
"mdcx.mcp_server"
],
"env": {
"MDCX_FILE": "ใส่ค่าของคุณ",
"MDCX_KEY": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"mdcx": {
"type": "stdio",
"command": "uvx",
"args": [
"mdcx",
"-m",
"mdcx.mcp_server"
],
"env": {
"MDCX_FILE": "ใส่ค่าของคุณ",
"MDCX_KEY": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
ค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 7 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub jorgell23-sys ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
ต้องใส่ค่าเหล่านี้: MDCX_FILE, MDCX_KEY
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (1.0.3) เข้า registry 3 เดือนที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Python (uv) ในเครื่องด้วย
ในหมวดเดียวกันมี Agent-Native Calendar, Excel MCP Server, MCP Server for Excel
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
Agent-Native Google Calendar - manage events, sync, and public booking
ให้ AI สร้างและแก้ไฟล์ Excel ได้เอง ทั้งสูตร กราฟ และ PivotTable โดยไม่ต้องมีโปรแกรม Excel ในเครื่อง
Excel automation for AI - Sheets, Power Query, DAX, VBA, Tables, Ranges and more. Windows only.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
Convert a document collection to verified Markdown, package it into a single encrypted archive with its search index and provenance, and serve it to agents over the Model Context Protocol.
mdcx addresses one constraint. An agent asked a question about a document collection must either receive the documents in its context window, which is bounded and billed per token, or query a component that holds an index and returns only the passages that bear on the question. mdcx implements the second.
Three properties define the result:
The pipeline has three stages. Conversion attempts each document with the least expensive engine able to read it and escalates only where that engine falls short: direct text extraction, then a pass that recovers drawn tables, then layout analysis, and optical character recognition for documents that expose no text. Packaging writes the corpus, its index and the provenance of each passage to one file. Retrieval merges word matching and dense retrieval by reciprocal rank, and states when nothing in the corpus bears on the question rather than returning its nearest passage.
Python 3.11 or later. No other component is required to query a package.
The floor is 3.11 because a package is one SQLite database, loaded from the decrypted bytes when it is opened, and sqlite3 gained the required call in that version. Conversion and cross-language retrieval each add dependencies, listed under Installation.
Querying and conversion are separated because their requirements differ by roughly two orders of magnitude. A recipient who only reads packages installs neither Docling nor PyTorch.
| Command | Provides | Approximate size |
|---|---|---|
pip install mdcx | querying and reading .mdcx packages | 10 MB |
pip install "mdcx[mcp]" | the above and the MCP server | 50 MB |
pip install "mdcx[convert]" | document conversion | 1.4 GB |
pip install "mdcx[tables]" | tables a page does not draw | 1.2 GB |
pip install "mdcx[multilingual]" | cross-language retrieval | 2.5 GB |
pip install "mdcx[all]" | all of the above, including OCR | 4 GB |
pip install "mdcx[all-gpu]" | the above without the CPU onnxruntime | 4 GB |
The multilingual extra supplies the embedding model, downloaded once on first use, and is required only for queries that cross languages.
The tables extra covers tables that are not drawn with rules — a screenshot of a spreadsheet, or a layout held together by alignment. It reads the geometry only; cell contents still come from the text layer of the document. Without it those pages are handled by the layout engine.
Install mdcx[all-gpu] rather than mdcx[all], and install onnxruntime-gpu separately.
onnxruntime and onnxruntime-gpu publish the same module and cannot coexist: whichever was installed last takes effect. An extra that pins the CPU build will therefore displace an accelerated one on every upgrade. all-gpu is all without that pin.
pip cannot express a dependency satisfied by either distribution, so this cannot be settled by declaration alone. mdcx-convert checks at startup and reports when the machine has a device the runtime does not offer. The check on its own:
python -c "import onnxruntime as o; assert 'CUDAExecutionProvider' in o.get_available_providers()"
pip install "mdcx[convert]"
mdcx-convert --input ./Documents --output ./Documents_md mdcx pack --output ./Documents_md --target corpus.mdcx --key "passphrase" mdcx search corpus.mdcx "where is the storage temperature stated" --key "passphrase"
mdcx-convert --input ./Documents --output ./Documents_md
The output folder mirrors the input directory structure, one .md per source document, together with an index of the run.
| Option | Effect |
|---|---|
--max-cores N | processes to run at once |
--gpu-workers N, --cpu-workers N | override the computed split |
--serial | one document at a time |
--only PATTERN, --limit N | restrict the run |
--force | ignore the cache and reconvert |
--no-docling | native engines only |
--formulas | transcribe formulas to LaTeX |
--no-gpu | do not use the device |
--no-lossless | do not write the backup JSON |
--no-compact | keep converter scaffolding in the Markdown |
--no-split, --split-threshold N | control splitting of long documents |
--sample-pages N | convert a spread sample of N pages per document |
--timeout SECONDS | abandon a document that exceeds this |
--recycle-after N | replace a worker after N documents |
An interrupted run resumes: work already recorded is not repeated unless --force is given.
Long documents are split into chapters, each converted independently, with an index document recording the correspondence to the original. A chapter is converted from an extract of the document, and its page markers state the document's own numbering rather than the extract's; its front matter declares first_page and last_page, so a passage can be cited back to the page it came from. The index document declares type: document_index and holds no text of its own — the text is in the chapters. --sample-pages converts a spread sample instead of the whole document; the front matter records both the pages taken and the document's total, so a sample is not mistaken for a short document.
--timeout exists because some documents do not complete under layout analysis. Without a limit one such document holds a worker for the length of the run. --recycle-after replaces a worker periodically, since abandoning a document does not stop the thread it started.
The text layer of a PDF does not carry the structure of a formula: the bar of a fraction is a drawn stroke, and a superscript is loose text on another line. A faithful extraction of that layer therefore renders a quotient as a single line. Nothing has gone wrong — the structure was never there to extract.
--formulas transcribes the formulas to LaTeX, which means reading their image rather than their text. That is recognition rather than extraction: a different kind of claim about the document, and one that can be wrong in ways extraction cannot, so it is asked for rather than assumed. It needs the structured engine — --no-docling turns it off and the run says so — and a model that is fetched once with docling-tools models download-hf-repo docling-project/CodeFormulaV2; where the model is missing the run refuses at the start rather than failing on the first page that holds a formula.
It is not free. Measured on one 20-page paper on this machine: 17.7 s without and 348.7 s with, for 56 transcribed formulas where the text layer yielded none. Prose gains nothing from it.
The transcription is appended under its own heading rather than replacing the text. On that paper the structured engine transcribed the formulas and lost 11% of the words, while native extraction covered the text and carried no formula — so choosing between them gives up one of the two. The record reports how many were transcribed as formulas.
Each conversion is compared against the text the original exposes. The index records the coverage achieved per file. Documents that expose no text — scanned drawings, for example — are marked unverifiable, since no text original exists to measure against.
The reference is read by a library independent of the layout and OCR engines, so for those the comparison is between two different readings of the document. For native extraction it is not: the reference and the extraction are the same read, and the comparison measures what the subsequent structuring and compaction kept. The reference is read once and used for both.
mdcx pack --output ./Documents_md --target corpus.mdcx --key "passphrase"
| Option | Effect | |
|---|---|---|
--key, --key-file | the passphrase; see Encryption | |
--multilingual | also index meaning | |
--focus QUESTION | a question the package exists to answer; repeatable | |
--dates FILE | supply publication dates; see Dates | |
--date-from-mtime | fall back to file modification time | |
--shapes | build the transcription-recovery index | |
--expressions | index the expressions the word rule discards | |
| `--quotes document\ | boundary` | how a quotation across a cut is found |
--reuse PACKAGE | reuse vectors from an existing package | |
--issuer, --signing-key | see Signing | |
--fast | compress for speed rather than size | |
--preset 0-9 | the compression level, overriding --fast | |
| `--compression lzma\ | zstd` | what compresses the body |
--output accepts a folder of Markdown, a single file, or a .jsonl file with one record per line, which is how a catalogue of records is packed without first writing it to disk.
--fast selects a lower compression preset, and --preset names one directly. Sealing is a fixed price paid on every write: a package meant to be distributed is compressed once and downloaded many times, while a corpus rebuilt whenever it grows pays the clock and not the bytes. The level travels inside the compressed stream, so a package written at any level is opened by any reader, and nothing else about the package changes.
--compression chooses what compresses the body. The header records the name and a package is read by what its header names, so existing packages are unaffected and either kind is opened by a reader that has the module for it. LZMA is the default and needs nothing; zstd needs mdcx[zstd]. Which is smaller depends on the material — measured on one corpus zstd was small
ตัดมาแค่ช่วงต้น อ่านต่อใน repo