🚀 AI-powered freelance gig aggregator MCP server for Claude Desktop. Search gigs, generate proposals, negotiate rates & optimize profiles with ChatGroq AI.
SaferSkills independently audited FreelanceMCP (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A comprehensive freelance platform aggregator MCP server that helps users find gigs, generate proposals, negotiate rates, and optimize their freelance profiles using AI
Want to use this with Claude Desktop right away? Follow these 3 steps:
claude_desktop_config.json:%APPDATA%\Claude\claude_desktop_config.json~/Library/Application Support/Claude/claude_desktop_config.jsonAdd this to the mcpServers section (replace paths and keys with yours):
{
"mcpServers": {
"freelance": {
"command": "uv",
"args": [
"run",
"--with", "mcp",
"--with", "python-dotenv",
"--with", "langchain-groq",
"--with", "pydantic",
"C:\\path\\to\\your\\freelance_server.py",
"stdio"
],
"env": {
"GROQ_API_KEY": "gsk_your_key_here",
"OWNER_COUNTRY_CODE": "1",
"OWNER_PHONE_NUMBER": "5551234567"
}
}
}
}Need more detailed instructions? See Integration with Claude Desktop below.
mcp-server-1/
├── freelance_server.py # Main MCP server (run this!)
├── requirements.txt # Dependencies
├── .env.example # Environment template
├── README.md # This file
├── STRUCTURE.md # Detailed structure guide
│
├── core/ # Core modules
├── database/ # Database layer
├── mcp_extensions/ # MCP protocol extensions
├── utils/ # Utilities
│
├── tests/ # Test suite
├── examples/ # Example code
├── docs/ # Documentation
│
└── .github/ # GitHub templates & workflowsSee STRUCTURE.md for complete directory documentation.
# Install required dependencies
uv pip install -r requirements.txt
# Or install individual packages
uv pip install mcp langchain-groq pydantic python-dotenvCreate a .env file in your project directory with your API keys:
# Windows
echo GROQ_API_KEY=your_actual_key_here > .env
echo OWNER_COUNTRY_CODE=1 >> .env
echo OWNER_PHONE_NUMBER=5551234567 >> .env
# Linux/Mac
cat > .env << EOF
GROQ_API_KEY=your_actual_key_here
OWNER_COUNTRY_CODE=1
OWNER_PHONE_NUMBER=5551234567
EOFRequired Environment Variables:
GROQ_API_KEY - Your Groq API key (get from https://console.groq.com/)OWNER_COUNTRY_CODE - Country code without + (e.g., 1 for US, 44 for UK)OWNER_PHONE_NUMBER - Phone number without country code or special charactersMCP_AUTH_TOKEN - (Optional) Authentication token for advanced setups.env fileOption A: Test Server Directly (for development)
# Test server in stdio mode
python freelance_server.py stdio
# Or with uv and dependencies
uv run --with mcp --with python-dotenv --with langchain-groq --with pydantic freelance_server.py stdioOption B: Use with Claude Desktop (recommended)
See the Integration with Claude Desktop section below for full setup instructions.
# Check environment setup
python freelance_client.py --check-env
# Run automated demo
python freelance_client.py --mode demo
# Run interactive mode
python freelance_client.py --mode interactiveyour-project/
├── freelance_server.py # MCP Server (main server file)
├── freelance_client.py # MCP Client (optional - for testing)
├── freelance_client2.py # MCP Client (alternative implementation)
├── main.py # Demo file
├── requirements.txt # Dependencies
├── .env # Environment variables (create this)
├── README.md # This guide
└── setup.py # Setup configurationpython freelance_client.py --mode demoThis will run through all features automatically:
python freelance_client.py --mode interactiveAvailable commands in interactive mode:
search - Search for matching gigsprofile - Create user profileanalyze - Analyze profile fit for gigsproposal - Generate AI proposalsnegotiate - Get rate negotiation helpreview - Review code qualitydebug - Debug and fix code issuesoptimize - Get profile optimization tipsresources - Access market datademo - Run full automated demoquit - Exit# Example: Search for React gigs under $1000
result = client.search_gigs(
skills=["JavaScript", "React", "TypeScript"],
max_budget=1000,
project_type="fixed_price"
)# Generate personalized proposals using ChatGroq LLM
proposal = client.generate_proposal(
gig_id="upwork_001",
user_profile=profile_data,
tone="professional"
)# Analyze code quality and get suggestions
review = client.code_review(
file_path="./src/component.js",
review_type="general"
)# Automatically fix common code issues
debug_result = client.code_debug(
file_path="./buggy_code.js",
issue_description="Replace var with let/const",
fix_type="auto"
)# Get AI-powered negotiation strategies
negotiation = client.negotiate_rate(
current_rate=40,
target_rate=65,
justification_points=["6+ years experience", "Proven track record"]
)Client (freelance_client.py)
↕️ (stdio transport)
Server (freelance_server.py)
↕️ (LLM calls)
ChatGroq API (Langchain integration)1. "ChatGroq not initialized" Error
# Make sure GROQ_API_KEY is set
python freelance_client.py --check-env
# Add your key to .env file
echo "GROQ_API_KEY=your_key_here" >> .env2. "freelance_server.py not found" Error
# Make sure the server file is in the same directory
ls -la freelance_server.py
# Or adjust the path in freelance_client.py3. Module Import Errors
# Install missing dependencies
pip install -r requirements.txt
# Or check what's missing
python freelance_client.py --check-env4. Server Connection Issues
# Make sure server file is executable
python freelance_server.py stdio # Test server directly
# Check for syntax errors in server file
python -m py_compile freelance_server.pyEnable detailed logging by setting environment variable:
export MCP_DEBUG=1
python freelance_client.py --mode demoTest the server independently:
# Run server in stdio mode
python freelance_server.py stdio
# Run server with SSE transport
python freelance_server.py sse
# Run server with HTTP transport
python freelance_server.py streamable-httpModify freelance_client.py to customize:
Step 1: Create Environment File
Create a .env file in your project directory:
# Windows
copy NUL .env
# Linux/Mac
touch .envAdd your API keys to .env:
GROQ_API_KEY=your_groq_api_key_here
MCP_AUTH_TOKEN=your_optional_auth_token
OWNER_COUNTRY_CODE=1
OWNER_PHONE_NUMBER=5551234567Step 2: Get GROQ API Key
.env fileStep 3: Locate Claude Desktop Config
%APPDATA%\Claude\claude_desktop_config.json~/Library/Application Support/Claude/claude_desktop_config.json~/.config/Claude/claude_desktop_config.jsonStep 4: Update Claude Desktop Config
Open claude_desktop_config.json and add the freelance server configuration:
{
"mcpServers": {
"freelance": {
"command": "uv",
"args": [
"run",
"--with", "mcp",
"--with", "python-dotenv",
"--with", "langchain-groq",
"--with", "pydantic",
"/absolute/path/to/your/freelance_server.py",
"stdio"
],
"env": {
"GROQ_API_KEY": "your_groq_api_key_here",
"MCP_AUTH_TOKEN": "your_optional_auth_token",
"OWNER_COUNTRY_CODE": "1",
"OWNER_PHONE_NUMBER": "5551234567"
}
}
}
}Important Notes:
/absolute/path/to/your/freelance_server.py with the actual full path to your freelance_server.py fileC:\\Users\\YourName\\MCPs\\freelance_server.py/Users/YourName/MCPs/freelance_server.pyWindows Example:
{
"mcpServers": {
"freelance": {
"command": "C:\\Users\\YourName\\.local\\bin\\uv.EXE",
"args": [
"run",
"--with", "mcp",
"--with", "python-dotenv",
"--with", "langchain-groq",
"--with", "pydantic",
"C:\\Users\\YourName\\MCPs\\mcp-server-1\\freelance_server.py",
"stdio"
],
"env": {
"GROQ_API_KEY": "gsk_xxxxxxxxxxxxxxxxxxxxx",
"MCP_AUTH_TOKEN": "your_optional_auth_token",
"OWNER_COUNTRY_CODE": "1",
"OWNER_PHONE_NUMBER": "5551234567"
}
}
}
}Step 5: Restart Claude Desktop
Step 6: Verify Installation
In Claude Desktop, try asking:
Troubleshooting Claude Desktop Integration:
ModuleNotFoundError - means dependencies are missing--with packages are included in argsstdio is the last argument in args arrayfreelance_server.py is absolute and correctuv is installed: Run uv --version in terminal.env file exists in the same directory as freelance_server.pyclaude_desktop_config.json match your .env file where.exe uv which uvAlternative: Manual Installation Method
If you prefer to install dependencies globally instead of using --with flags:
# Install dependencies globally with uv
uv pip install mcp python-dotenv langchain-groq pydantic
# Then use simpler config
{
"mcpServers": {
"freelance": {
"command": "uv",
"args": [
"run",
"/path/to/freelance_server.py",
"stdio"
],
"env": {
"GROQ_API_KEY": "your_key_here",
"OWNER_COUNTRY_CODE": "1",
"OWNER_PHONE_NUMBER": "5551234567"
}
}
}
}If you want to access your MCP server remotely via HTTPS:
# 1. Download and install ngrok
# Visit: https://ngrok.com/download
# 2. Add your authtoken (sign up at ngrok.com to get one)
ngrok config add-authtoken <your_token>
# 3. Start your MCP server on a specific port
python freelance_server.py sse --port 8080
# 4. In another terminal, expose it with ngrok
ngrok http 8080
# 5. Use the provided HTTPS URL to connect remotely
# Example: https://abc123.ngrok.ioNote: For production use, consider implementing proper authentication and security measures.
The client can be extended to:
Once integrated with Claude Desktop, you'll have access to these tools:
Contributions are welcome! Please feel free to submit a Pull Request.
This project is open source and available under the MIT License.
For issues, questions, or contributions, please visit the GitHub repository.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.