flru-mcp
Local MCP server for the FL.ru freelance marketplace that enables browsing projects, scoring relevance, saving proposal drafts, and dry-run proposal submission via natural language.
README
flru-mcp
Local MCP server for working with the FL.ru freelance marketplace. It lets Codex or another MCP client browse projects, inspect details, score relevance, keep local history, save proposal drafts, and preview proposal 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+
uv- Chromium for Playwright
- FL.ru account for authenticated features
Installation
uv sync --extra dev
uv run playwright install chromium
Copy .env.example to .env and fill only local secrets there:
cp .env.example .env
Important 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
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/.
Launch MCP Server
uv run flru-mcp
Codex MCP configuration example:
{
"mcpServers": {
"flru": {
"command": "uv",
"args": ["run", "flru-mcp"],
"cwd": "/home/stepanov-sv/projects/fl.ru",
"env": {
"FLRU_DRY_RUN": "true"
}
}
}
}
Tools
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
Message tools currently return NOT_IMPLEMENTED until authenticated message endpoints are 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=true
No 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=true
Browser failure screenshots and HTML snapshots are stored under data/debug/.
Local Scanner
uv run flru-scan
The scanner discovers and scores projects into SQLite. It never submits proposals.
Tests
uv run pytest
Current 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.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.