借用 Chrome 已登入的 session,而非儲存帳密。
大多數抓 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 也拿得到」這件事做窄做穩的工具。
MCP 客戶端呼叫
載入 Chrome session
開目標 profile
抓貼文
下載媒體 + metadata
回傳結果
A Model Context Protocol server for fetching Instagram posts using Chrome's existing login session. 授權來自 Chrome 既有 session,不儲存任何帳號憑證。
clone、build,並以 Chrome 路徑啟動。
前置條件只有一項:需要一個已登入 Instagram 的 Chrome profile,並知道其 user data 目錄路徑。Server 本身是標準 Node/TypeScript 專案,步驟為 clone、安裝相依、build,再以 CHROME_USER_DATA_DIR 指向該 profile 啟動。
# 1. 取得原始碼
git clone https://github.com/duhlink/instagram-server-next-mcp.git
cd instagram-server-next-mcp
# 2. 安裝相依並 build
npm install
npm run build
# 3. 指向你「已登入 Instagram」的 Chrome profile 啟動
CHROME_USER_DATA_DIR=/path/to/chrome/profile npm start接進你的 MCP 客戶端
Server 走 stdio 的 JSON-RPC 2.0,接法跟一般 MCP Server 一樣:在客戶端的 MCP 設定裡指向 build 後的進入點,並把那個 Chrome 路徑放進 env。下面是結構示意,實際欄位依你用的 MCP 客戶端為準。
{
"mcpServers": {
"instagram": {
"command": "node",
"args": ["/abs/path/instagram-server-next-mcp/build/index.js"],
"env": { "CHROME_USER_DATA_DIR": "/path/to/chrome/profile" }
}
}
}單一對外工具 get_instagram_posts,各模組分層封裝功能。
此 Server 對外只有 get_instagram_posts 一個工具。各內部模組分別解決具體問題:不碰帳密的授權機制、媒體落地、metadata 生成,以及抓取速率控制。以下依設計分類列出。
Tool · 01
get_instagram_posts
唯一對外工具
給定 username,抓回該帳號近期貼文。可選 limit(1–50 或 "all")、saveDir、delayBetweenPosts。
Auth · 02
Chrome session
不碰帳密
用 CHROME_USER_DATA_DIR 接管你已登入的 Chrome profile,沒有獨立憑證、不破 2FA、行為更像真人。
Media · 03
自動下載媒體
圖片影片落地
抓貼文時自動把媒體檔下載到指定目錄,不只拿連結,讓後續處理不依賴 IG CDN。
Meta · 04
metadata 生成
結構化輸出
為每則貼文產生 metadata,讓 AI 客戶端拿到的不是裸圖,而是可直接消費的結構資料。
SEO · 05
描述生成
SEO 友善
內建 SEO-friendly 描述生成,把貼文轉成適合索引/再利用的文字,而非只搬原文。
Arch · 06
模組化架構
乾淨分層
core/ 管 MCP、features/instagram/ 管抓取、services/browser/ 管瀏覽器,要改哪塊很清楚。
Proto · 07
JSON-RPC 2.0
標準 MCP
遵循 Model Context Protocol、JSON-RPC 2.0 通訊,任何 MCP 客戶端都能接,不綁特定工具。
Rate · 08
delayBetweenPosts
節流抓取
用毫秒參數控制每則貼文之間的間隔,放慢節奏降低觸發風控的機率,批次抓時尤其關鍵。
get_instagram_posts 參數速查
| 參數 | 必填 | 說明 |
|---|---|---|
username | 是 | 要抓取的 Instagram 帳號 |
limit | 否 | 抓幾則,1–50 或字串 "all" |
saveDir | 否 | 媒體與 metadata 的儲存目錄 |
delayBetweenPosts | 否 | 每則貼文之間的間隔(毫秒),用來節流 |
啟動前須確認的六項配置要點。
此專案體量小且功能單一,常見問題幾乎集中在「Chrome session」的配置上。以下六項均出自官方 README 與原始碼結構,建議啟動前逐一確認,可減少除錯往返。
先確認那個 profile 真的登入了
整個工具的成敗都押在 CHROME_USER_DATA_DIR 指到的 profile 上。啟動前先用那個 profile 開一次 Instagram,確認不是登出狀態、沒有跳安全驗證,再去跑 Server。
來源 · 官方 README · Prerequisite
抓之前先把 Chrome 關掉
Chrome 對同一個 user data 目錄通常會上鎖。若你本人正開著那個 profile,自動化往往起不來。抓取前先完全結束該 Chrome,讓 Server 獨佔 session。
來源 · Chrome profile 鎖定 · 設計推論
大量抓就把 delayBetweenPosts 拉高
limit: "all" 很誘人,但連續快抓最容易觸發 IG 風控。把 delayBetweenPosts 設成數秒級的毫秒值,寧可慢,也別讓 session 被標記。
來源 · 官方 README · 參數說明
用三支 test_ 腳本分段排查
抓不到時別瞎猜。repo 根目錄的 test_browserService.ts、test_profileScraper.ts、test_instagramMCP.ts 對應瀏覽器/抓取/MCP 三層,單獨跑就能定位是哪一層斷掉。
來源 · repo 根目錄測試檔
先 build 再 start,別直接 start
它是 TypeScript 專案,npm start 跑的是 build 後的產物。改完程式或剛 clone,務必先 npm run build;開發時改用 npm run dev 才有即時回饋。
來源 · 官方 README · NPM Scripts
固定 saveDir,讓下游接得住
把 saveDir 指到一個穩定目錄,媒體與 metadata 就有可預期的落點。下游(內容整理、再發布、索引)直接讀這個資料夾,不必每次去解析回傳。
來源 · 官方 README · 參數說明
從單次工具呼叫到落地媒體的完整示意。
以下是依官方工具行為改寫的情境:你在已接好這個 MCP Server 的 Claude 裡,要某個品牌帳號最近的貼文做內容研究。看 Claude 怎麼呼叫 get_instagram_posts、Server 怎麼借 Chrome session 抓取、媒體與 metadata 怎麼落地。畫面為示意,實際輸出依貼文與設定而定。
$ You ›
幫我抓 @natgeo 最近 12 則貼文,我要做一份內容研究。
claude: Claude ›
我用接好的 instagram-server-next-mcp 來抓。先確認你的
Chrome 已登入 Instagram,這個 Server 不存帳密,
是借 CHROME_USER_DATA_DIR 指到的那份既有 session。
ok: ✓ 12 則貼文已落地 ./research/natgeo
post_01/ image.jpg metadata.json
post_02/ video.mp4 metadata.json
…
post_12/ image.jpg metadata.json
claude: Claude ›
抓完了,12 則都在 ./research/natgeo。每則的
metadata.json 含貼文文案、時間、媒體路徑,還有
Server 生成的 SEO-friendly 描述。我接著幫你彙整:
hl: · 主題分布:野生動物 7 / 地景 3 / 人文 2
hl: · 文案平均長度 ~ 280 字,多以提問開頭
hl: · 影片貼文集中在週末發布
$ You ›
很好。再把 limit 設 "all" 抓完整檔,間隔拉長一點。
claude: Claude ›
建議把 delayBetweenPosts 調大(例如 3000ms)再跑
limit:"all",量大時節流能降低被 Instagram 擋的風險。
單次工具呼叫,輸出媒體檔案與 metadata。 授權來源是 Chrome 既有 session,Server 不儲存帳密。
這段流程為什麼值得拆解
重點不在「能抓 IG」,而在 抓取的授權來源是你已登入的 Chrome,而不是塞給 Server 的帳密。Claude 只是把自然語言需求翻成一次 get_instagram_posts 呼叫,Server 借 session、開 profile、把媒體與 metadata 寫進 saveDir,再把結果交回對話。
畫面為依官方工具行為改寫的示意。實際輸出的目錄結構、欄位與訊息依貼文內容與客戶端而定。此工具無官方 API 背書,應視為研究與備份的取數層,而非穩定的生產管線。
使用前須了解的邊界與風險。
將此 Server 整合至內容研究或備份流程。
此專案的原始碼體量小且結構清晰:以 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 與相依,供確認本機環境。
A Model Context Protocol server for fetching Instagram posts using Chrome's existing login session.