| Crates.io | autoreply |
| lib.rs | autoreply |
| version | 0.3.5 |
| created_at | 2025-09-30 12:28:55.855298+00 |
| updated_at | 2025-11-01 02:28:45.262813+00 |
| description | autoreply: Model Context Protocol server for Bluesky profile and post search functionality |
| homepage | https://github.com/oyin.bo/autoreply |
| repository | https://github.com/oyin.bo/autoreply |
| max_upload_size | |
| id | 1861069 |
| size | 560,550 |
A dual-mode application for Bluesky profile and post search functionality, written in Rust.
This application supports two operational modes:
Both modes implement the same tools:
profile(account) - Retrieve user profile informationsearch(account, query) - Search posts within a user's repositoryfeed - Get the latest feed from BlueSky (Discovery feed or curated feeds)thread(postURI) - Fetch a complete thread with all repliespost(postAs, text, replyTo) - Create posts and replies to the BlueSky networkreact(reactAs, like, unlike, repost, delete) - Interact with posts (likes, reposts, deletions)login(...) - Authenticate accounts and manage stored credentials (OAuth + app password)
Authentication support via app passwords allows storing and managing credentials for future authenticated operations.
✅ Complete MCP Protocol Implementation
✅ Authentication & Credential Management
login (with subcommands: list, default <handle>, delete)login tool with interactive elicitation for handles and app passwords
✅ Bluesky Integration
✅ Advanced Functionality
✅ Quality Assurance
🧪 Experimental Features (opt-in via feature flags)
experimental-sentencepiece)cd rust-server
cargo build --release
# Build with SentencePiece support (requires protobuf compiler)
cargo build --release --features experimental-sentencepiece
Note: Experimental features require additional dependencies and are not recommended for production use.
The server communicates via stdio using the MCP protocol:
./target/release/autoreply
When invoked with arguments, the binary operates as a command-line utility:
# Get profile information
autoreply profile --account alice.bsky.social
# Search posts
autoreply search --account bob.bsky.social --query "rust programming" --limit 10
# Authentication commands
# OAuth browser flow (default - recommended!)
autoreply login --handle alice.bsky.social
# App password authentication
autoreply login --handle alice.bsky.social --password app-password-here
# Account management
autoreply login list
autoreply login default alice.bsky.social
autoreply login delete --handle alice.bsky.social
# Get help
autoreply --help
autoreply profile --help
autoreply search --help
autoreply login --help
For complete CLI usage documentation, see CLI-USAGE.md.
For authentication details and examples, see src/auth/README.md.
This server honors system proxy environment variables via reqwest’s system proxy detection:
Examples:
# HTTPS over an HTTP proxy (CONNECT):
export HTTPS_PROXY=http://application-proxy.blackrock.com:9443
# Exclude local addresses or specific hosts:
export NO_PROXY=localhost,127.0.0.1,::1
# Run the server
./target/release/autoreply
Notes:
List available tools:
{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}
Get user profile:
{"jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": {"name": "profile", "arguments": {"account": "alice.bsky.social"}}}
Search user's posts:
{"jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": {"name": "search", "arguments": {"account": "alice.bsky.social", "query": "hello world"}}}
Create a post:
{"jsonrpc": "2.0", "id": 4, "method": "tools/call", "params": {"name": "post", "arguments": {"postAs": "alice.bsky.social", "text": "Hello from MCP!"}}}
Reply to a post:
{"jsonrpc": "2.0", "id": 5, "method": "tools/call", "params": {"name": "post", "arguments": {"postAs": "alice.bsky.social", "text": "Great point!", "replyTo": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l47qoztfqi2w"}}}
React to posts:
{"jsonrpc": "2.0", "id": 6, "method": "tools/call", "params": {"name": "react", "arguments": {"reactAs": "alice.bsky.social", "like": ["at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l47qoztfqi2w"]}}}
Get feed:
{"jsonrpc": "2.0", "id": 7, "method": "tools/call", "params": {"name": "feed", "arguments": {"limit": 20}}}
Note: Omit the feed argument to use the default "What's Hot" feed, or provide a feed URI like at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.generator/whats-hot
Get thread:
{"jsonrpc": "2.0", "id": 8, "method": "tools/call", "params": {"name": "thread", "arguments": {"postURI": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l47qoztfqi2w"}}}
Note: The postURI should be in at:// format, e.g., at://{did}/app.bsky.feed.post/{postId}
Login / manage credentials:
{"jsonrpc": "2.0", "id": 9, "method": "tools/call", "params": {"name": "login", "arguments": {"handle": "alice.bsky.social"}}}
**Login / manage credentials:**
```json
{"jsonrpc": "2.0", "id": 6, "method": "tools/call", "params": {"name": "login", "arguments": {"handle": "alice.bsky.social"}}}