讓 LLM 直接操作 PTT — PTT MCP Server
PyPtt 做了很多年,解決的是「怎麼用程式自動化操作 PTT」。但它有個前提:
你得先會寫 Python。
想寫一個「每天幫我看某板有沒有關鍵字」的小工具,你得先開個專案、裝套件、查 API、處理登入登出、包排程。做完了,功能是死的,想改條件就又得改程式碼。
MCP(Model Context Protocol)出現之後,這件事情就變得不一樣了。你可以直接跟 LLM 說「幫我看看 Python 板最近有沒有人在討論 uv」,剩下的它自己去翻。
隆重跟大家介紹 PTT MCP Server。
這東西在幹嘛
一句話:它是 PyPtt 的 MCP 包裝,讓支援 MCP 的 LLM client 真的登入 PTT 跟站台互動。
不是爬網頁版,不是讀 RSS。是真的用你的帳號連上 ptt.cc,走跟你用終端機一模一樣的路徑。所以你在站上看得到的,它就看得到;你的帳號權限能做的,它就能做。
底層還是 PyPtt 在扛連線跟 VT100 畫面還原 與 PTT 溝通的那些髒活。MCP server 這層只做兩件事:把 PyPtt 的能力翻譯成 MCP tool,以及管理登入狀態。
裝起來
只有 Docker 一條路。沒有 pip,沒有 uvx。
原因很單純:PyPtt 的執行環境有一堆眉角,我不想再收「我這邊裝不起來」的 issue。丟進 image 裡,大家跑的就是同一個東西。
在你的 MCP client 設定檔裡加上:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17{
"mcpServers": {
"PTT": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "PTT_ID",
"-e", "PTT_PW",
"ghcr.io/pyptt/ptt_mcp_server:latest"
],
"env": {
"PTT_ID": "你的帳號",
"PTT_PW": "你的密碼"
}
}
}
}
走的是 stdio,所以 docker run -i 的 -i 不能拿掉。image 有 amd64 跟 arm64,M 系列 Mac 直接跑。
如果你有多個帳號,改用 PTT_ACCOUNTS:1
PTT_ACCOUNTS=default=帳號A:密碼A,alt=帳號B:密碼B
然後就可以叫 LLM 用 switch_account 換帳號。要注意分隔字元的限制:名稱不能有 =、帳號不能有 :、密碼不能有 ,。
能做什麼
目前 29 個 tool。大致分成幾類:
讀:
get_post取文章,支援 AID、index、搜尋條件get_newest_index取某板最新編號get_post_index_range給一個日期,二分搜尋出當天的文章區間get_board_info/get_all_boards/get_favourite_boards/get_bottom_post_listget_user/search_user查使用者get_aid_from_url從網址拿 AID,這是唯一不用登入的
寫:
post發文、reply_post回文、del_post刪文與劣退comment推噓箭頭mail/get_mail/del_mail站內信give_money轉 P 幣
帳號與板務:
login/logout/whoami/list_accounts/switch_accountset_board_title改板標、bucket水桶,這兩個要板主權限
有了這些,「幫我把這篇文章的推文整理成重點」「看看 Gossiping 昨天有沒有人提到 XXX」「幫我回這篇文,語氣客氣一點」這種話就直接可以講。
注意
這個 server 沒有唯讀模式,沒有程式層的確認機制,沒有白名單。
LLM 呼叫 del_post,文章就真的會刪掉。呼叫 give_money,P 幣就真的會轉出去。
目前的保護只有一層:所有具破壞性的 tool,在 docstring 裡都寫了給 LLM 看的祈使句——「重要!務必遵守!執行前務必顯示內容並與使用者確認後才可以執行。」
這是 prompt engineering,不是技術保證。它大部分時候有效,但它不是防護欄,它是請求。
所以我在 README 裡寫得很直白:先讀後寫,確認再執行。我知道這句話擋不住真正的意外,但至少讓你知道風險在哪。
另外,帳號密碼是明文的環境變數。沒有加密、沒有檔案來源選項。這個設定檔就是你的密碼,請當作密碼來對待。
如果你要拿它跑無人值守的自動化,我的建議是開一個小帳,而不是用你養了十幾年的主帳號。
結語
PyPtt 解決的是「程式能不能操作 PTT」。
ptt_mcp_server 解決的是「不寫程式的人,能不能操作 PTT」。
PyPtt 的第一個 commit 是 2017 年,ptt_mcp_server 是 2025 年。中間隔了八年。有點久,但工具鏈就是這樣,得等生態長出來。
如果你裝起來遇到問題,或是覺得哪個 tool 的行為很怪,開 issue 給我。特別是安全性那塊,我知道現在的做法不夠,歡迎討論怎麼做比較好。