这是一个提供与 Instagram 图形 API 无缝集成的 Model Context Protocol (MCP) 服务器,使 AI 应用能够通过编程方式与 Instagram 商业账户进行交互。
标准访问(立即可用):
instagram_basicinstagram_content_publishinstagram_manage_insightsinstagram_manage_commentspages_show_listpages_read_engagementpages_manage_metadatapages_read_user_contentbusiness_management高级访问(需要 Meta 应用审核):
instagram_manage_messages - 需要直接消息功能⚠️ Instagram 直发消息功能:阅读和发送 Instagram 直接消息需要 Meta 的高级访问批准。请参阅 INSTAGRAM_DM_SETUP.md 了解应用审核流程。
📖 快速入门:请参阅 AUTHENTICATION_GUIDE.md,了解五分钟设置指南!
本节提供了获取 Instagram MCP 服务器所需凭证的逐步指南。
转换为商业账户(如果尚未转换):
连接到 Facebook 页面:
前往 Facebook 开发者:
创建新应用:
添加 Instagram 基础显示产品:
配置 Instagram 基础显示:
添加 Instagram 图形 API 产品:
配置权限:
instagram_basicinstagram_content_publishinstagram_manage_insightspages_show_listpages_read_engagement前往图形 API 探索器:
配置探索器:
获取页面访问令牌:
/me/accountsaccess_token获取 Instagram 商业账户 ID:
/{page-id}?fields=instagram_business_account设置 Facebook 登录:
实现 OAuth 流程:
# 示例 OAuth URL
oauth_url = f"https://www.facebook.com/v19.0/dialog/oauth?client_id={app_id}&redirect_uri={redirect_uri}&scope=pages_show_list,instagram_basic,instagram_content_publish,instagram_manage_insights"
交换代码以获取令牌:
# 交换授权码以获取访问令牌
token_url = f"https://graph.facebook.com/v19.0/oauth/access_token?client_id={app_id}&redirect_uri={redirect_uri}&client_secret={app_secret}&code={auth_code}"
短期令牌在 1 小时后过期。转换为长期令牌(有效期 60 天):
curl -X GET "https://graph.facebook.com/v19.0/oauth/access_token?grant_type=fb_exchange_token&client_id={app_id}&client_secret={app_secret}&fb_exchange_token={short_lived_token}"
在项目根目录创建一个 .env 文件:
# Facebook 应用凭证
FACEBOOK_APP_ID=your_app_id_here
FACEBOOK_APP_SECRET=your_app_secret_here
# Instagram 访问令牌(长期)
INSTAGRAM_ACCESS_TOKEN=your_long_lived_access_token_here
# Instagram 商业账户 ID
INSTAGRAM_BUSINESS_ACCOUNT_ID=your_instagram_business_account_id_here
# 可选:API 配置
INSTAGRAM_API_VERSION=v19.0
RATE_LIMIT_REQUESTS_PER_HOUR=200
CACHE_ENABLED=true
LOG_LEVEL=INFO
运行验证脚本来测试您的凭证:
python scripts/setup.py
或者手动测试:
import os
import requests
# 测试访问令牌
access_token = os.getenv('INSTAGRAM_ACCESS_TOKEN')
response = requests.get(f'https://graph.facebook.com/v19.0/me?access_token={access_token}')
print(response.json())
长期令牌在 60 天后过期。实现自动刷新:
# 检查令牌有效性
def check_token_validity(access_token):
url = f"https://graph.facebook.com/v19.0/me?access_token={access_token}"
response = requests.get(url)
return response.status_code == 200
# 在过期前刷新长期令牌
def refresh_long_lived_token(access_token, app_id, app_secret):
url = f"https://graph.facebook.com/v19.0/oauth/access_token"
params = {
'grant_type': 'fb_exchange_token',
'client_id': app_id,
'client_secret': app_secret,
'fb_exchange_token': access_token
}
response = requests.get(url, params=params)
return response.json().get('access_token')
错误:“无效的 OAuth 访问令牌”
错误:“未找到 Instagram 账户”
错误:“权限不足”
速率限制问题
git clone <repository-url>
cd ig-mcp
pip install -r requirements.txt
cp .env.example .env
# 使用您的 Instagram API 凭证编辑 .env
# 编辑 config.json 以包含您的特定设置
INSTAGRAM_ACCESS_TOKEN=your_long_lived_access_token
FACEBOOK_APP_ID=your_facebook_app_id
FACEBOOK_APP_SECRET=your_facebook_app_secret
INSTAGRAM_BUSINESS_ACCOUNT_ID=your_instagram_business_account_id
将此添加到您的 MCP 客户端配置(例如,Claude Desktop):
{
"mcpServers": {
"instagram": {
"command": "python",
"args": ["/path/to/ig-mcp/src/instagram_mcp_server.py"],
"env": {
"INSTAGRAM_ACCESS_TOKEN": "your_access_token"
}
}
}
}
你能获取我的 Instagram 个人资料信息吗?
展示我最近 5 条 Instagram 帖子及其互动指标
将这张图片上传到我的 Instagram 账户,并加上标题“美丽的日落!#摄影 #自然”
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
# 连接到 Instagram MCP 服务器
server_params = StdioServerParameters(
command="python",
args=["src/instagram_mcp_server.py"]
)
async with stdio_client(server_params) as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
# 获取个人资料信息
result = await session.call_tool("get_profile_info", {})
print(result)
服务器实现了智能速率限制以遵守 Instagram 的 API 限制:
服务器为常见场景提供了全面的错误处理:
ig-mcp/
├── src/
│ ├── instagram_mcp_server.py # 主 MCP 服务器
│ ├── instagram_client.py # Instagram API 客户端
│ ├── models/ # 数据模型
│ ├── tools/ # MCP 工具实现
│ ├── resources/ # MCP 资源实现
│ └── prompts/ # MCP 提示实现
├── tests/ # 单元和集成测试
├── config/ # 配置文件
├── requirements.txt # Python 依赖项
├── .env.example # 环境变量模板
└── README.md # 本文档
# 运行所有测试
python -m pytest tests/
# 运行带覆盖率的测试
python -m pytest tests/ --cov=src/
# 运行特定测试文件
python -m pytest tests/test_instagram_client.py
git checkout -b feature/amazing-feature)git commit -m '添加神奇功能')git push origin feature/amazing-feature)“无效访问令牌”
“超出速率限制”
“权限被拒绝”
启用调试日志记录,设置:
LOG_LEVEL=DEBUG
本项目根据 MIT 许可证发布 - 详见 LICENSE 文件。