flru-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@flru-mcp find relevant projects for a Python developer"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
marketplace-mcp
Local MCP server for working with marketplace and freelance platforms. The current implementation supports FL.ru, Avito, and Freelancer.com: Codex or another MCP client can browse projects, inspect details, score relevance, keep local history, save proposal/bid drafts, and preview submission in dry-run mode.
The server is intentionally not an autonomous proposal bot. Sending proposals is a separate tool and defaults to dry-run.
Requirements
Python 3.12+
uvChromium for Playwright
FL.ru account for authenticated features
Freelancer.com account for authenticated bid features
Related MCP server: kwork-mcp
Installation
uv sync --extra dev
uv run playwright install chromiumCopy .env.example to .env and fill only local secrets there:
cp .env.example .envImportant defaults:
FLRU_DRY_RUN=trueFLRU_BROWSER_PROFILE=./data/browser-profileFLRU_STORAGE_STATE=./data/storage_state.jsonFLRU_DATABASE=./data/flru_mcp.sqlite3FLRU_EXPERTISE_PROFILE=./config/expertise.yml
Avito defaults:
AVITO_DRY_RUN=trueAVITO_BROWSER_PROFILE=./data/avito-browser-profileAVITO_STORAGE_STATE=./data/avito_storage_state.jsonAVITO_CLIENT_ID=andAVITO_CLIENT_SECRET=are optional, but required for official API calls.
Freelancer.com defaults:
FREELANCER_DRY_RUN=trueFREELANCER_BROWSER_PROFILE=./data/freelancer-browser-profileFREELANCER_STORAGE_STATE=./data/freelancer_storage_state.jsonFREELANCER_LOGIN=andFREELANCER_PASSWORD=are optional, but allow Playwright to prefill login.
First Authentication
FL.ru login currently shows Yandex SmartCaptcha. The server does not bypass it.
Run the MCP tool flru_login from a client, or run the server and call the tool with:
{ "headless": false }Playwright opens FL.ru login. Complete login and any CAPTCHA/2FA manually. The resulting browser storage state is saved under data/.
Freelancer.com authentication works the same way through freelancer_login. The server can prefill credentials from .env, but captcha, email confirmation, 2FA, billing/profile prompts, and other checks must be completed manually.
Launch MCP Server
uv run marketplace-mcpCodex MCP configuration example:
{
"mcpServers": {
"flru": {
"command": "uv",
"args": ["run", "marketplace-mcp"],
"cwd": "/home/stepanov-sv/projects/marketplace-mcp",
"env": {
"FLRU_DRY_RUN": "true"
}
}
}
}Tools
FL.ru:
flru_auth_statusflru_loginflru_list_projectsflru_search_projectsflru_get_projectflru_find_relevant_projectsflru_mark_project_seenflru_get_unseen_projectsflru_get_project_historyflru_get_proposal_contextflru_save_proposal_draftflru_get_proposal_draftflru_submit_proposalflru_get_customerflru_list_conversationsflru_get_conversationflru_send_message
Avito:
avito_auth_statusavito_loginavito_list_my_adsavito_get_adavito_create_ad_draftavito_get_ad_draftavito_list_ad_draftsavito_open_create_ad_pageavito_publish_ad
Freelancer.com:
freelancer_auth_statusfreelancer_loginfreelancer_list_projectsfreelancer_search_projectsfreelancer_get_projectfreelancer_find_relevant_projectsfreelancer_get_bid_contextfreelancer_save_bid_draftfreelancer_get_bid_draftfreelancer_submit_bid
Message tools currently return NOT_IMPLEMENTED until authenticated message endpoints are verified.
Avito Workflow
Avito support uses the official API where possible and Playwright only for manual browser sessions.
To use API-backed tools, create Avito API credentials in the Avito account/API settings and set:
AVITO_CLIENT_ID=...
AVITO_CLIENT_SECRET=...Then:
1. avito_auth_status
2. avito_list_my_ads
3. avito_create_ad_draft
4. avito_publish_adavito_publish_ad returns a dry-run preview while AVITO_DRY_RUN=true.
Real automated publication is not enabled yet because Avito returned IP/CAPTCHA protection during research and the authenticated add-item form was not safely verified. Use avito_open_create_ad_page to open the human page for manual inspection/completion. The server must not bypass CAPTCHA, IP checks, paid placement, moderation, or other manual verification.
Freelancer.com Workflow
Freelancer.com public project discovery uses HTTP and server-rendered job pages. Authentication and bid-related checks use Playwright because the login and bid UI are dynamic and can require manual verification.
Typical dry-run flow:
1. freelancer_list_projects or freelancer_find_relevant_projects
2. freelancer_get_project for selected candidates
3. freelancer_get_bid_context
4. Client drafts a tailored bid
5. freelancer_save_bid_draft
6. freelancer_submit_bid returns a preview because FREELANCER_DRY_RUN=trueReal bid submission is intentionally disabled until the authenticated bid form is verified with fixtures and success checks. With FREELANCER_DRY_RUN=false, freelancer_submit_bid still checks authentication, project state, and local duplicates, then returns REAL_FREELANCER_BID_SUBMISSION_NOT_VERIFIED.
Dry-Run Workflow
1. flru_find_relevant_projects
2. flru_get_project for selected candidates
3. Client drafts a proposal from source data
4. flru_save_proposal_draft
5. flru_submit_proposal returns a preview because FLRU_DRY_RUN=trueNo FL.ru modification is made in dry-run.
Real Submission Workflow
Real submission is intentionally not enabled yet because the authenticated freelancer proposal form was not verified during public-page research. With FLRU_DRY_RUN=false, flru_submit_proposal still performs auth, project, duplicate, closed-project, and form checks, then returns REAL_SUBMISSION_NOT_ENABLED_FOR_UNVERIFIED_FORM unless a verified proposal form is parsed.
Before enabling real submission, inspect the authenticated form with Playwright, document fields in docs/flru-research.md, add fixtures/tests, and verify success from the project page after submit. Never retry ambiguous POSTs automatically.
Debugging
Set:
FLRU_HEADLESS=false
FLRU_DEBUG=trueBrowser failure screenshots and HTML snapshots are stored under data/debug/.
Local Scanner
uv run flru-scanThe scanner discovers and scores projects into SQLite. It never submits proposals.
Tests
uv run pytestCurrent tests cover parsers, budgets, project detail extraction, relevance scoring, SQLite history/drafts, dry-run submission, and duplicate prevention.
Known FL.ru Limitations
Public project pages are server-rendered and parseable over HTTP.
Login includes SmartCaptcha, so authentication is manual through Playwright.
FL.ru uses DDoS-Guard; crawling is sequential with respectful delays.
Authenticated proposal and message forms were not verified from public research, so real sending is disabled.
CSS selectors are isolated in parser functions and documented in
docs/flru-research.md.
Known Freelancer.com Limitations
Public project lists are parseable over HTTP from
/jobs/and skill pages such as/jobs/php/.Login is an Angular/SPA flow, so Playwright is used for authentication.
Captcha, 2FA, email checks, profile completion, and paid/billing prompts are never bypassed.
Real bid submission is not enabled until the authenticated form is documented in
docs/freelancer-research.mdand covered by tests.
Available Tools
17 toolsflru_auth_statusA
Checks whether the current FL.ru session is authenticated.
Inputs: no named parameters.
flru_find_relevant_projectsD
Inputs: limit, max_pages, min_score, only_unseen.
flru_get_conversationD
Inputs: conversation_id (required).
flru_get_customerD
Inputs: profile_url (required).
flru_get_projectD
Inputs: url, project_id.
flru_get_project_historyD
Inputs: project_id (required).
flru_get_proposal_contextD
Inputs: project_id (required).
flru_get_proposal_draftD
Inputs: project_id (required).
flru_get_unseen_projectsD
Inputs: limit.
flru_list_conversationsD
Inputs: no named parameters.
flru_list_projectsD
Inputs: page, limit, query, category, +4 more.
flru_loginB
Starts a manual Playwright login session and persists browser storage state.
Inputs: headless.
flru_mark_project_seenD
Inputs: project_id (required).
flru_save_proposal_draftD
Inputs: text (required), project_id (required).
flru_search_projectsD
Inputs: query (required), page, limit.
flru_send_messageD
Inputs: text (required), conversation_id (required).
flru_submit_proposalD
Inputs: text (required), project_id (required), price, delivery_days.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 17 tools
Tools are mostly distinct, each targeting a specific resource (projects, proposals, conversations, customer, auth). However, the project-related tools (find_relevant_projects, get_unseen_projects, list_projects, search_projects) may overlap in purpose, especially without detailed descriptions.
Names generally follow a consistent flru_verb_noun pattern (e.g., flru_get_project, flru_send_message). A few exceptions like flru_login and flru_auth_status deviate slightly, but the overall pattern is predictable and readable.
With 17 tools, this sits in the 16-25 range that feels heavy. The count is justified by the broad scope (auth, projects, proposals, conversations, customer), but some tools may be redundant (multiple project discovery variants), making the set slightly larger than necessary.
The tool surface covers the core workflow from authentication through project discovery, proposal drafting/submission, and client communication. Missing operations like updating/withdrawing proposals or marking conversations read, but the main lifecycle is well represented.
Maintenance
Related MCP Connectors
MCP server for generating rough-draft project plans from natural-language prompts.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Public MCP server for discovering open jobs. Search, filter, and get application links.
MCP Server for Slima - AI Writing IDE for Novel Authors with AI Beta Reader.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP server for Freelo project management API, enabling task and project management through natural language.63 npm10MIT
- AlicenseBqualityBmaintenanceMCP-сервер для Kwork.ru и kwork.com: биржа, отклики, диалоги и заказы из Claude Code, Codex и Cursor22133 PyPI6MIT
- AlicenseBqualityCmaintenanceLightweight MCP server for 1C.ai integration, enabling queries, code analysis, and documentation search via natural language.82AGPL 3.0
- FlicenseNot gradedqualityFmaintenanceMCP server for the Upwork GraphQL API enabling job search, contract management, proposal drafting, and other Upwork automation tasks via natural language.-