FreeFeed MCP Server
MCP server for the FreeFeed API, a social network that replaces FriendFeed.
Features
Read
get_timeline- Get a user timeline or the home feedget_directs- Get direct (private) posts timelineget_post- Get a specific post with commentsget_post_attachments- Get attachment list with URLssearch_posts- Search posts with advanced operatorsget_user_profile- Get user profile infoget_user_subscriptions- Get subscriptions/subscribersget_my_groups- Get user's groupsget_group_timeline- Get group postsget_group_info- Get group info
Write
upload_attachment- Upload files (images, video, etc.)download_attachment- Download post attachments (returns image content when possible)get_attachment_image- Download attachment as image content with URL fallbackcreate_direct_post- Send a direct post to one or more recipientsleave_direct- Leave a direct post threadcreate_post- Create a new post (auto uploads files, supports posting to groups)update_post- Edit a postdelete_post- Delete a postlike_post/unlike_post- Likesadd_comment- Add a commentupdate_comment/delete_comment- Manage commentssubscribe_user/unsubscribe_user- Subscribe/unsubscribe
Privacy & Opt-out
Users can opt out of AI analysis by:
- Adding one of these tags to their profile description: #noai, #opt-out-ai, #no-bots, #ai-free
- Setting their account to private
- Contacting the server maintainer to be added to the manual opt-out list
The server automatically excludes:
- Private accounts (isPrivate: "1")
- Paused accounts (isGone: true)
- Users with opt-out tags in their profile
Opt-out filtering is disabled by default. Enable it with configuration:
FREEFEED_OPTOUT_ENABLED=trueFREEFEED_OPTOUT_USERS=oneuser,anotheruserFREEFEED_OPTOUT_TAGS=#noai,#opt-out-ai,#no-bots,#ai-freeFREEFEED_OPTOUT_RESPECT_PRIVATE=trueFREEFEED_OPTOUT_RESPECT_PAUSED=trueFREEFEED_OPTOUT_CONFIG=/path/to/opt_out.json
Example opt-out config file:
{
"enabled": true,
"manual_opt_out": ["someuser"],
"tags": ["#noai", "#opt-out-ai", "#no-bots", "#ai-free"],
"respect_private": true,
"respect_paused": true
}
Installation
- Install dependencies:
pip install -e .
- Create a
.envfile:
FREEFEED_BASE_URL=https://freefeed.net
FREEFEED_API_VERSION=4
FREEFEED_APP_TOKEN=your_app_token
# or
FREEFEED_USERNAME=your_username
FREEFEED_PASSWORD=your_password
Usage
Start server
python -m freefeed_mcp_server
REST API server
# Start HTTP API server
python -m freefeed_mcp_server.api
# Or with uvicorn
uvicorn freefeed_mcp_server.api:app --reload
The API will be available at http://localhost:8000
📚 API documentation: see API.md 🌐 Swagger UI: http://localhost:8000/docs
Claude Desktop integration
Add to Claude Desktop config (claude_desktop_config.json):
{
"mcpServers": {
"freefeed": {
"command": "python",
"args": ["-m", "freefeed_mcp_server"],
"env": {
"FREEFEED_BASE_URL": "https://freefeed.net",
"FREEFEED_API_VERSION": "4",
"FREEFEED_APP_TOKEN": "your_app_token"
}
}
}
}
Replace `/path/to/venv/bin/python` with your actual virtualenv path. On macOS it is often
`./.venv/bin/python` if you created a local venv in the project directory.
Claude Desktop integration (system Python)
Use the system Python executable:
{
"mcpServers": {
"freefeed": {
"command": "/usr/bin/python3",
"args": ["-m", "freefeed_mcp_server"],
"env": {
"FREEFEED_BASE_URL": "https://freefeed.net",
"FREEFEED_API_VERSION": "4",
"FREEFEED_APP_TOKEN": "your_app_token"
}
}
}
}
Claude Desktop integration (virtualenv)
Use the Python executable from your virtualenv:
{
"mcpServers": {
"freefeed": {
"command": "/path/to/venv/bin/python",
"args": ["-m", "freefeed_mcp_server"],
"env": {
"FREEFEED_BASE_URL": "https://freefeed.net",
"FREEFEED_API_VERSION": "4",
"FREEFEED_APP_TOKEN": "your_app_token"
}
}
}
}
### MCP tool examples
{ "name": "get_directs", "arguments": { "limit": 20 } } ```
{
"name": "create_direct_post",
"arguments": {
"body": "Hi from MCP!",
"recipients": ["alice", "bob"]
}
}
{
"name": "leave_direct",
"arguments": {
"post_id": "POST_ID"
}
}
{
"name": "get_attachment_image",
"arguments": {
"attachment_url": "https://freefeed.net/attachments/ATTACHMENT_ID",
"max_bytes": 2000000
}
}
{
"name": "download_attachment",
"arguments": {
"attachment_url": "https://freefeed.net/attachments/ATTACHMENT_ID",
"prefer_image": true,
"max_bytes": 2000000
}
}
## Request examples
### Get home feed
{ "name": "get_timeline", "arguments": { "timeline_type": "home" } } ```
Search posts
{
"name": "search_posts",
"arguments": {
"query": "intitle:MCP from:username"
}
}
Create a post
{
"name": "create_post",
"arguments": {
"body": "Testing the FreeFeed MCP server!"
}
}
Create a post with an image
{
"name": "create_post",
"arguments": {
"body": "Check out this photo!",
"attachment_paths": ["/path/to/image.jpg"]
}
}
Create a post in a group
{
"name": "create_post",
"arguments": {
"body": "A post for my group!",
"group_names": ["mygroup"]
}
}
Get group posts
{
"name": "get_group_timeline",
"arguments": {
"group_name": "mygroup",
"limit": 20
}
}
Get post attachments and download
{
"name": "get_post_attachments",
"arguments": {
"post_id": "post-id-here"
}
}
Then download: ``json { "name": "download_attachment", "arguments": { "attachment_url": "https://freefeed.net/attachments/att-id", "save_path": "/path/to/save/image.jpg" } } ``
FreeFeed API
API docs: https://github.com/FreeFeed/freefeed-server/wiki/API
Supported search operators:
intitle:query- search in post bodyincomment:query- search in commentsfrom:username- search by authorAND,OR- logical operators
License
MIT






