instagram-mcp
instagram-mcp
一个 MCP 服务器,将 instagrapi — Instagram 的私有移动 API — 以 49 个工具的形式暴露给代理调用。
默认开启只读。一切会改变账号状态的操作(发文、点赞、关注、评论、发私信、删除)在明确开启写入之前都会被拒绝。
设置
cp .env.example .env然后在 .env 中填入用户名和密码,或从已经登录的浏览器里复制的 sessionid cookie(DevTools → Application → Cookies → instagram.com)。使用 sessionid 这条路不太容易触发登录验证。
如果账号开启了双重验证,把验证码器中的"设置密钥"粘贴到 INSTAGRAM_TOTP_SEED,系统就会自动生成验证码。否则,当 Instagram 要求输入验证码时,调用 instagram_login 并传入 verification_code。
在不触碰 Instagram 的情况下验证安装:
.venv/Scripts/python smoke_test.pyRelated MCP server: Instagram MCP Server
注册服务器
本项目的 ../.mcp.json 中已经注册。如果要在其他地方使用:
claude mcp add instagram -- "C:\Users\osami\OneDrive\Documents\GitHub\ayham project 2\instagram-mcp\.venv\Scripts\instagram-mcp.exe"可执行文件在任意目录下都能运行——它总是读取与本 README 同目录下的 .env,并把 session.json 写在同一位置。
开启写入操作
INSTAGRAM_ALLOW_WRITES=true之后重启服务器。只要该值为 false,写工具会失败并附上说明,而不是真正执行任何操作,因此只读工具仍然可用。
工具
分组 | 工具 |
撰写私信 |
|
人设搜索 |
|
会话 |
|
用户 |
|
帖子 |
|
发现 |
|
私信 |
|
互动 |
|
发布 |
|
* 需要将 INSTAGRAM_ALLOW_WRITES 设置为 true。
用户通过 username 或 user_id 指定。帖子通过一个 media 参数指定,接受帖子 URL、短码或数字媒体 id。
用你自己的风格撰写私信
这是这个服务器的主要用途。让模型替你写消息的问题在于,它会把正确写出来——标点完整、大写规范、彬彬有礼——所有认识你的人一眼就能看出不是你。
所以,instagram_build_style_profile 会衡量你自己发出的私信里你实际是怎么写的:消息长度、大小写、结尾标点、表情符号使用密度、具体用了哪些表情符号、你怎么拼写笑声、常用缩写、语言混排,以及你是连发短消息还是发一个更长、完整整理的消息。它会全局地并且针对每个联系人记录——因为,没有一个人给妈妈写信的方式和给最好的朋友一样。
運一次:
.venv/Scripts/python -c "import asyncio,json;from instagram_mcp.server import server;print(asyncio.run(server.call_tool('instagram_build_style_profile',{})).content[0].text[:400])"之后,instagram_prepare_dm(person="sarah") 就会在一次调用中返回一次性的请求、测量到的你的写作风格规则,以及你对查具体对象的具体写作样例。这个单次调用就是草稿写作的全部接口;不需要拼合底层的线程工具。
风格文件会保存在 style_profile.json 里,永远不会发送给 Instagram。随着你的开始飘移,可以间或刷新。
技能
~/.claude/skills/instagram-dm/SKILL.md负责整个正常对话中的工作流——"回复 ahmed"、"我该怎么回她"、"检查我的 ins私信"。它负责找到对象、加载你的风格、起草,并在一切发送前把草稿保留给你确认。
没有先看到确切文字之前,什么都不会发送给你。
寻找符合某个角色模板的人
这是这个服务器的另一个用途。你描述一个人——女性、阿姆斯特丹、健身、二十多岁中段、金发——然后得到排序好的档案并给出每个属性的置信度结论。
难处在于Instagram 没有任何针对这些东西的索引。它索引四类东西:账号名和名字文本、话题标签、地点地理标签,以及关注关系图谱。不是任何一类一个人物。所以每个属性要么被编译成一个针对这几种索引的探测查询,要么之后再从返回结果中推断——这就使得它成为一条用查找率换取对方的漏斗,而不是一个查询。
|GXP6|
真正让座起效的是 `instagram_similar_accounts`,它读取 Instagram 自己的"推荐给你"图,该图模型化了协作率关系。一旦你找到*一个*好匹配,从它向外展开的效果胜过任何关键词搜索——这就是为什么文本和话题标签探测主要存在的目标就是为了找到那第一踩点。
另一件值得一提的地点是关于地点的。Instagram 的`city`字段几乎永远是缺失值,偶尔还会是错误值——一次实际探测返回了一个叫"Hollanda"的地点,而坐标却放在埃及的亚历山大。地点*名字*碎片化严重,同一个城市会返回"Amsterdam, Netherlands"、"Amsterdam Canal District"、"Red Light District, Amsterdam"以及"Amsterdam Canal River"四种说法。坐标总是存在的,所以 iper 定位按位置聚类而不是按名字聚类:多个变体会自动合并,而错贴名的条目会孤立出来。
原本设计时依赖的某种做法最后发现并不存在。Instagram 为照片生成 alt 文本("maybe be a image of one person, blonde hair, standing"),作为每篇帖子的免费粗粒度视觉信号——但它只向 Web 客户端暴露,且 32 篇帖子的实际探测中全部返回为空。因此外表属性真的需要真实查看图片,上限也如实反映这类需求,而不至于假充其量。
一次搜索是磁盘上的一个任务,而不是一个函数调用:真实的一次需要对一个将被 Instagram 限流速的账号做几百次 API 请求,耗时十到二分钟,所以它逐阶段运行,能承受崩溃,并且让你在二十次调用之后修正一个错误的探测方案,而不是进行到三百次再修正。
GXP7
### 看图评判断层
外观是唯一没有免费信号可以到达的属性,所以必须用眼睛看。`instagram_search_shortlist(image_download=true)` 会获取每个候选人的头像和近景缩略图,然后拼合成**一张带编号的联系卡**,而不是交给一堆散文件。
这不仅仅是整洁问题。它花掉十二分之一的注意力,编号让评价可以引用所来源的卡片,也让一个最棘手的问题变得可答:*这些脸上哪一张是账号持有者?* 信息流里满是朋友、伴侣与客户,如果你基于错误的正确的那张作出判断,得到的自信程度和正确判断一样高。把全部图片并列放置,这个问题就变成可以直视的:找出反复出现的脸,对照写有 `avatar` 的 tile——那是唯一确定是本人——然后将结果记为 `owner_face_confidence`。那里的低值会降低所有视觉读数的置信度,而不是假装人员赱得更差。
一个档案页的截图会展示大致相同的资料,但那个页面需要用登录状态的浏览器才能渲染,而这些缩略图都已经抓取并付出代价完成了。
### 解读置信度
每个属性上都携带两个数字而不是一个:**匹配度**表示证据与匹配度结论符合有多好,**确定性**表示证据来源多能信到。一个模型只报“85%”,是悄悄把两者相乘并丢掉了哪一方弱。
确定性在每个属性和每个来源上都是封顶的,系统不能夸大其辞。从一张头像读出的头发颜色封顶 0.45;从多张白天的图片读出则 0.80。Instagram 自己的“账号所在”发源国字段最高 0.95。**身高封顶是 0.15**——一张静态的图片没有尺度参照——且 `height`、`ethnicity` 和 `build` 都是参考性的:会被报告,但绝不用于调整排名,如果你把它们标为必填则直接排除。
未观测不等于“无”。一个任何人都无法观察的属性降低的是 **coverage(覆盖度)**,而不是匹配度,排名会根据验证了多小比例而向先验收缩——所以这个差距 [0.9,两个属性观测] 不如 [0.75,六个观测]。任何被标为 `unverified` 的内容得分高于能行动的程度。
结果只适用于公开账号。私有账号因为无法验证而在入口处被丢弃。永远不会返回十八岁以下的人:年龄从声明出生年份和 Instagram 加入日期中读出的,用这两个估值的*较低端*决定,检查在年龄可读时和每次发生出口时都运行——一个审计发现原始的仅在出口处执行检查的版本无法保护任何东西,因为入口在年龄被读取之前就已经运行。每个候选者都保持完整 provenance,包括发现它的探针以及每个结论依据是什么。搜索任务存放在 `searches/` 并已在 `.gitignore`:它们包含其他人的资料与图片。
## 保持不被封号
instagrapi 驱动的是手机端 App 使用的私有 API。Instagram 会检测并阻止自动行为,而它阻止的账号是你自己的——所以:
- **会话会被缓存**在 `session.json` 中并复用。反复从头登录
是触发风控最快的方式。请保留这个文件。
- **请求会被随机间隔**,使用 `INSTAGRAM_DELAY_MIN`–`INSTAGRAM_DELAY_MAX`
秒的随机暂停。如果 Instagram 开始要求你等待,就调高这个值。
- **收到警告就退避。** “请等待几秒钟”和“操作被阻止”
意味着停止,而不是重试。工具的错误信息里也已说明这一点。
- **批量读取有风险。** 一次性拉取上千个关注者,
看起来根本不像是真人或真实用户在使用。
- **如果只是实验,请使用一次性账号或小号。
## 布局
| 文件 | 内容 |
| --- | --- |
| `instagram_mcp/server.py` | 49 个工具定义 |
| `instagram_mcp/persona.py` | persona 是什么,以及置信度计算 |
| `instagram_mcp/signals.py` | 离线、免费地从个人资料中判断 persona |
| `instagram_mcp/names.py` | 将名字映射到性别先验,离线 |
| `instagram_mcp/discovery.py` | 候选人的召回渠道来自哪里 |
| `instagram_mcp/search.py` | 将 persona 搜索作为可恢复任务保存在磁盘上 |
| `instagram_mcp/sheets.py` | 将候选图片组合成一张可评分的表格 |
| `instagram_mcp/client.py` | 登录、会话持久化、写入保护、并发线程 |
| `instagram_mcp/serialize.py` | instagrapi 模型的紧凑 JSON 视图 |
| `instagram_mcp/errors.py` | 将 Instagram 异常转换为可操作的建议 |
| `smoke_test.py` | 离线检查:schema、守卫、序列化器 |
`.env` 和 `session.json` 中保存凭据和有效登录 Cookie,`searches/`
保存他人的资料和照片。这三个都被 gitignore 忽略——请继续保持这样。Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables LLMs to interact with Instagram through a comprehensive toolkit for account management, content creation, messaging, social graph analysis, and content discovery.11
- AlicenseNot gradedqualityDmaintenanceEnables AI applications to interact with Instagram Business accounts through the Graph API, supporting profile management, media publishing, insights retrieval, and direct messaging capabilities.MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage Instagram Business accounts by automating content publishing, scheduling posts, and analyzing performance metrics. Supports posts, stories, reels, and carousels with detailed audience insights and hashtag discovery.
- AlicenseAqualityCmaintenanceEnables AI assistants to manage Instagram and Threads accounts — publish content, handle comments, view insights, search hashtags, and manage DMs through the Meta Graph API.594610MIT
Related MCP Connectors
Instagram for AI agents: publish, read comments and DMs, insights, and engage from your account.
60+ Meta Ads tools for AI agents: audits, campaign management, audiences and CAPI tracking.
Give your agent live data from Twitter, Reddit, the web and GitHub. No API keys, no scraping stack.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/osAlhaddad1/instagram-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server