Initial commit: freelance-mcp v0.1.0
Multi-platform freelance automation MCP server. Phase 1 — Upwork adapter (11 tools): - Search/filter jobs (14 params, server + post filters) - Get job details with client intelligence - Submit proposals with cover letters - List/status proposals - List contracts by status/type - Get contract details with milestones - List message rooms with unread counts - Send messages - Get freelancer profile - Check connects balance - Auth status check Architecture: Platform adapter pattern with abstract base class. Auth: OAuth 2.0 with automatic token refresh. Tools registered at startup via MCP SDK protocol.
This commit is contained in:
81
README.md
Normal file
81
README.md
Normal file
@@ -0,0 +1,81 @@
|
||||
# freelance-mcp
|
||||
|
||||
A **Model Context Protocol** server that connects AI agents to freelance platforms via their official APIs.
|
||||
|
||||
## Platforms
|
||||
|
||||
| Platform | Status | Auth | Capabilities |
|
||||
|---|---|---|---|
|
||||
| **Upwork** | ✅ Live | OAuth 2.0 | Search jobs, submit proposals, messages, contracts, profile |
|
||||
| **Freelancer.com** | 🔧 Coming | OAuth 2.0 | Search projects, bid, messages, contracts |
|
||||
| **Fiverr** | ❌ No public API | — | Read-only scraping only |
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# Install
|
||||
pip install -e .
|
||||
|
||||
# Set Upwork API credentials
|
||||
export UPWORK_CLIENT_ID="your_client_id"
|
||||
export UPWORK_CLIENT_SECRET="your_client_secret"
|
||||
|
||||
# Run OAuth flow (one-time)
|
||||
freelance-mcp-auth auth upwork
|
||||
|
||||
# Start the MCP server
|
||||
freelance-mcp
|
||||
```
|
||||
|
||||
## Tools
|
||||
|
||||
All tools are prefixed with the platform name:
|
||||
|
||||
### Upwork (`upwork_*`)
|
||||
|
||||
| Tool | Description |
|
||||
|---|---|
|
||||
| `upwork_search_jobs` | Search jobs with 15+ filters |
|
||||
| `upwork_get_job_details` | Full job posting with client intelligence |
|
||||
| `upwork_get_profile` | Your freelancer profile |
|
||||
| `upwork_get_connects` | Check connects balance |
|
||||
| `upwork_submit_proposal` | Submit a proposal with cover letter |
|
||||
| `upwork_list_proposals` | Track submitted proposals |
|
||||
| `upwork_list_contracts` | View active/ended contracts |
|
||||
| `upwork_get_contract_details` | Full contract with milestones |
|
||||
| `upwork_list_messages` | Message rooms with unread counts |
|
||||
| `upwork_send_message` | Send a message |
|
||||
| `upwork_check_auth` | Check authentication status |
|
||||
|
||||
## Architecture
|
||||
|
||||
```
|
||||
freelance-mcp/
|
||||
├── src/freelance_mcp/
|
||||
│ ├── server.py # MCP entry point
|
||||
│ ├── platforms/
|
||||
│ │ ├── base.py # Abstract adapter
|
||||
│ │ └── upwork.py # Upwork GraphQL + REST
|
||||
│ ├── auth/
|
||||
│ │ ├── cli.py # Auth CLI (freelance-mcp-auth)
|
||||
│ │ └── token_store.py # OAuth token persistence
|
||||
│ └── config/
|
||||
│ └── loader.py # Config from environment
|
||||
```
|
||||
|
||||
## Hermes Integration
|
||||
|
||||
Add to your `~/.hermes/config.yaml`:
|
||||
|
||||
```yaml
|
||||
mcp_servers:
|
||||
freelance:
|
||||
command: "freelance-mcp"
|
||||
env:
|
||||
UPWORK_CLIENT_ID: "${UPWORK_CLIENT_ID}"
|
||||
UPWORK_CLIENT_SECRET: "${UPWORK_CLIENT_SECRET}"
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
Reference in New Issue
Block a user