instagram-server-next-mcp 是以 TypeScript 撰寫的 MCP Server。它不需要 Instagram 帳號密碼,而是直接借用 Chrome 既有的登入 session,將指定帳號的貼文連同媒體與 metadata 一併擷取,交給 Claude 等 MCP 客戶端使用。本手冊說明安裝步驟、單一對外工具的參數,以及完整的一次抓取流程。
大多數抓 Instagram 的工具,第一步都要你交出帳號密碼,或塞一段 session cookie。instagram-server-next-mcp 走的是另一條路:它一個憑證都不要,而是直接接管你電腦上「那個你早就登入 Instagram 的 Chrome profile」,用這個既有 session 去開頁面、讀貼文。官方定位只有一句:一個用 Chrome 既有登入 session 抓 Instagram 貼文的 MCP Server。
它的形態是 MCP Server,遵循 Model Context Protocol,以 JSON-RPC 2.0 通訊,對外只暴露一個工具 get_instagram_posts。Claude 之類的 MCP 客戶端呼叫這個工具,Server 在背後驅動 Chrome 走到目標 profile,把貼文連同媒體檔與 metadata 一起落地,再把結果交回去。整份程式碼 98.4% 是 TypeScript,模組切得很乾淨:core/ 管 MCP、features/instagram/ 管抓取邏輯、services/browser/ 管瀏覽器。
這個設計的代價與好處都很明確:好處是不碰帳密、不破 2FA、行為更像真人;代價是它跟你的 Chrome profile 綁死,離不開那台已登入的機器。它不是一個通用 Instagram API,而是一個把「我自己看得到的貼文,讓 AI 也拿得到」這件事做窄做穩的工具。
前置條件只有一項:需要一個已登入 Instagram 的 Chrome profile,並知道其 user data 目錄路徑。Server 本身是標準 Node/TypeScript 專案,步驟為 clone、安裝相依、build,再以 CHROME_USER_DATA_DIR 指向該 profile 啟動。
Server 走 stdio 的 JSON-RPC 2.0,接法跟一般 MCP Server 一樣:在客戶端的 MCP 設定裡指向 build 後的進入點,並把那個 Chrome 路徑放進 env。下面是結構示意,實際欄位依你用的 MCP 客戶端為準。
npm run dev(開發模式)與 npm run lint(跑 linter)。Repo 根目錄還附了 test_browserService.ts、test_instagramMCP.ts、test_profileScraper.ts 三支測試腳本,排查瀏覽器或抓取問題時可以單獨跑。
get_instagram_posts,
此 Server 對外只有 get_instagram_posts 一個工具。各內部模組分別解決具體問題:不碰帳密的授權機制、媒體落地、metadata 生成,以及抓取速率控制。以下依設計分類列出。
username,抓回該帳號近期貼文。可選 limit(1–50 或 "all")、saveDir、delayBetweenPosts。CHROME_USER_DATA_DIR 接管你已登入的 Chrome profile,沒有獨立憑證、不破 2FA、行為更像真人。core/ 管 MCP、features/instagram/ 管抓取、services/browser/ 管瀏覽器,要改哪塊很清楚。| 參數 | 必填 | 說明 |
|---|---|---|
username |
是 | 要抓取的 Instagram 帳號 |
limit |
否 | 抓幾則,1–50 或字串 "all" |
saveDir |
否 | 媒體與 metadata 的儲存目錄 |
delayBetweenPosts |
否 | 每則貼文之間的間隔(毫秒),用來節流 |
此專案體量小且功能單一,常見問題幾乎集中在「Chrome session」的配置上。以下六項均出自官方 README 與原始碼結構,建議啟動前逐一確認,可減少除錯往返。
整個工具的成敗都押在 CHROME_USER_DATA_DIR 指到的 profile 上。啟動前先用那個 profile 開一次 Instagram,確認不是登出狀態、沒有跳安全驗證,再去跑 Server。
Chrome 對同一個 user data 目錄通常會上鎖。若你本人正開著那個 profile,自動化往往起不來。抓取前先完全結束該 Chrome,讓 Server 獨佔 session。
來源 · Chrome profile 鎖定 · 設計推論limit: "all" 很誘人,但連續快抓最容易觸發 IG 風控。把 delayBetweenPosts 設成數秒級的毫秒值,寧可慢,也別讓 session 被標記。
抓不到時別瞎猜。repo 根目錄的 test_browserService.ts、test_profileScraper.ts、test_instagramMCP.ts 對應瀏覽器/抓取/MCP 三層,單獨跑就能定位是哪一層斷掉。
它是 TypeScript 專案,npm start 跑的是 build 後的產物。改完程式或剛 clone,務必先 npm run build;開發時改用 npm run dev 才有即時回饋。
把 saveDir 指到一個穩定目錄,媒體與 metadata 就有可預期的落點。下游(內容整理、再發布、索引)直接讀這個資料夾,不必每次去解析回傳。
以下是依官方工具行為改寫的情境:你在已接好這個 MCP Server 的 Claude 裡,要某個品牌帳號最近的貼文做內容研究。看 Claude 怎麼呼叫 get_instagram_posts、Server 怎麼借 Chrome session 抓取、媒體與 metadata 怎麼落地。畫面為示意,實際輸出依貼文與設定而定。
重點不在「能抓 IG」,而在 抓取的授權來源是你已登入的 Chrome,而不是塞給 Server 的帳密。Claude 只是把自然語言需求翻成一次 get_instagram_posts 呼叫,Server 借 session、開 profile、把媒體與 metadata 寫進 saveDir,再把結果交回對話。
畫面為依官方工具行為改寫的示意。實際輸出的目錄結構、欄位與訊息依貼文內容與客戶端而定。此工具無官方 API 背書,應視為研究與備份的取數層,而非穩定的生產管線。
CHROME_USER_DATA_DIR 指向的既有 session 上。沒有該 session,工具無法擷取資料。這也意味著它無法在從未登入 Instagram 的純伺服器環境中運行。
delayBetweenPosts 調大,並分批抓。
get_instagram_posts 只抓貼文與媒體,不發文、不互動、不管理帳號。需要發布請另找工具,別期待它做雙向操作。
此專案的原始碼體量小且結構清晰:以 TypeScript 撰寫,分 core/、features/instagram/、services/browser/ 三層,全部可讀完。需要新增工具或修改抓取行為,可直接在既有模組上擴充,不需重建架構。MIT 授權,可自由 fork。
1. 擴充工具。目前只有 get_instagram_posts。順著 features/instagram/ 的模式,可以加抓單篇、抓 highlights、或抓特定日期區間的工具,沿用同一套 services/browser/ session 機制。
2. 接進內容研究管線。把它當取數層:Claude 抓回媒體 + metadata 後,串你的分析、改寫、生成 brief 流程,做競品內容研究或選題參考。
3. 做帳號備份。用 limit:"all" + 較大的 delayBetweenPosts 排程,把自家帳號的貼文與媒體定期落地存檔,當成離線備份。
4. 鎖定獨立 Chrome profile。專門開一份只登 Instagram 的 Chrome user-data-dir,CHROME_USER_DATA_DIR 指過去,跟你日常用的瀏覽器分開,避免 profile 鎖定互卡。
5. 自己維護它。因為依賴 Instagram 前端,fork 後要有人盯著 DOM 變動、隨時修解析。把它納進你的維護清單,而不是當黑盒。
① README.md:工具參數、安裝步驟與 CHROME_USER_DATA_DIR 設定的第一手說明。
② src/:core/、features/instagram/、services/browser/ 的分層架構,可查抓取與 session 的實作細節。
③ package.json:build / start / dev / lint scripts 與相依,供確認本機環境。