workana-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., "@workana-mcpDame las mejores oportunidades de Workana de hoy para mi stack."
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.
workana-mcp
An MCP server that lets Claude find and score freelance projects on Workana, so you spend your time on proposals that can actually win.
Why I built it
Most Workana projects are a poor fit: dozens of proposals already in, tiny budgets, clients who never paid anyone, or requests to move the conversation to WhatsApp. Checking each one by hand every day took longer than writing the proposals. This tool does the filtering and tells me which handful are worth my time.
It is read-only by design. Workana has no public API, so the server reads the same public pages you see in the browser without logging in. It never touches your account, never sends proposals or messages. You decide where to apply and send the proposal yourself.
Related MCP server: Workix MCP
Tools
Tool | What it does |
| Search with filters: text, skills, category/subcategory, language, fixed price or hourly, age (24h/3d/week), few proposals only, client country, minimum budget, minimum rate, maximum proposals. Sort by opportunity, date or fewest proposals. |
| Full project page: complete description, skills, budget, proposals, interested freelancers and the client (country, rating, projects posted and paid, member since, verified payment, their other projects). |
| Opportunity score 0–100 with a breakdown, alerts, pros and cons, and tips for the proposal. |
| Daily workflow: searches recent projects for your stack, drops the bad ones, deep-analyzes the best N and ranks them. |
How the score (0–100) works
Stack fit (30): strong technologies (React, Node, TypeScript, Next, Express, Nest) in the skills or text, plus the % of the project's skills you have.
Competition (25): 0–4 proposals = 25 … 35+ = 2.
Budget (20): fixed price (≥ 1,000 USD = 20) or hourly rate (≥ 45 USD/h = 20).
Client (15): verified payment, rating, projects already paid and how many they posted.
Freshness (10): under 6 h = 10 … over a week = 0.
Penalties: paying or working outside Workana, contact via WhatsApp or Telegram, email in the description, free trial work, payment in equity or percentage, "low" budget, clones of big platforms, closed project.
Priority: high from 65, medium 45–64, low below 45. It's a heuristic to prioritize, not a guarantee.
The interesting problem: results Workana hides
Logged out, Workana only shows 7 of every 20 results per page and hides the rest to push you to sign up. Instead of logging in (which would put an account at risk), the server notices when a search has hidden results and splits it into narrower searches (by pricing model, number of proposals, subcategory, skill and, as a last resort, more pages), then merges and de-duplicates the results. max_consultas (default 20, max 30) caps how many requests that costs, and the response says how many projects it saw out of the total Workana reports.
The same idea fills another gap: a logged-out project page doesn't show the budget or verified payment, so the server finds the project in the listings by title and fills those fields in.
Requests go through curl_cffi (presenting as Chrome), wait 1.5 s between calls and are cached for 5 minutes.
Your profile
By default it scores against a fullstack stack: React.js, Node.js, TypeScript, JavaScript, Next.js, Express.js, NestJS, HTML/CSS, API/REST, MongoDB, MySQL/SQL, Git and Firebase. Two ways to change it:
Per query, with the
mis_skillsparameter.Permanently, with the
WORKANA_MIS_SKILLSvariable in the server config (comma-separated).
Install (Linux)
Register the run.sh launcher in Claude Desktop. On first run it installs its dependencies into .venv and logs to install.log.
Claude Desktop → Settings → Developer → Edit config.
Inside
"mcpServers", add:
"workana": {
"command": "bash",
"args": ["/PATH/TO/workana-mcp/run.sh"]
}Optionally, set your skills profile:
"workana": {
"command": "bash",
"args": ["/PATH/TO/workana-mcp/run.sh"],
"env": { "WORKANA_MIS_SKILLS": "React.js,Node.js,TypeScript,Next.js,NestJS,PostgreSQL,Docker" }
}Fully restart Claude Desktop. The first start takes a minute or two while it installs. If the
workana_*tools don't show up, checkinstall.log.
Example prompts
"Give me today's best Workana opportunities for my stack."
"Find fixed-price React or Next projects posted in the last 24 hours with few proposals."
"Evaluate this project: https://www.workana.com/job/…"
"Find hourly Node.js projects paying at least 20 USD/h from clients in Spain or the US."
The tool's output is in Spanish, its author's first language.
Limitations
If Workana blocks requests, wait a few minutes and use fewer pages.
If Workana changes its site,
parsers.pyneeds updating. The tests (.venv/bin/python tests/test_all.py) run against saved real responses and catch it.Personal use, low volume. Don't use it to scrape at scale or to automate sending proposals: that violates Workana's terms and puts your account at risk.
License
MIT
Available Tools
4 toolsworkana_buscar_proyectosARead-onlyIdempotent
Busca proyectos abiertos en Workana con filtros y les pone un puntaje rápido de oportunidad (0-100) según encaje con tu stack, competencia, presupuesto, cliente y frescura. Solo lee el listado público: para datos del cliente (proyectos pagados, antigüedad) usa workana_evaluar_proyecto.
| Name | Required | Description | Default |
|---|---|---|---|
| texto | No | Texto libre, p. ej. 'dashboard', 'ecommerce', 'api'. | |
| idioma | No | Idioma del proyecto. | es |
| skills | No | Skills de Workana (se combinan con O). Acepta nombres ('React', 'Node.js', 'TypeScript') o slugs ('react-js', 'node-js', 'typescript', 'next-js', 'express-js', 'nest-js', 'javascript', 'react-native', 'vue-js', 'angular', 'mongodb', 'mysql', 'sql', 'api', 'rest-api', 'firebase', 'docker', 'python', 'php', 'laravel', 'wordpress', 'shopify', 'chatbot', 'web-scraping'). Vacío = tu stack por defecto (React, Node, TypeScript, Next, Express, Nest). Pasa [] junto con 'texto' para buscar solo por texto. | |
| formato | No | 'markdown' para leer, 'json' para procesar. | markdown |
| categoria | No | Categoría de Workana. | programacion |
| modalidad | No | Tipo de contrato. | |
| mis_skills | No | Tu stack para calcular el encaje. Vacío = perfil por defecto (React, Node, TypeScript, Next…). | |
| publicados | No | Antigüedad máxima del proyecto. | semana |
| ordenar_por | No | Orden del resultado. | oportunidad |
| pais_cliente | No | Código ISO del país del cliente, p. ej. 'AR', 'MX', 'ES', 'US'. | |
| subcategoria | No | Subcategoría (solo para 'programacion'). | |
| max_consultas | No | Máximo de peticiones al listado. Sin sesión Workana oculta 13 de cada 20 resultados, así que el servidor divide la búsqueda (por skill, modalidad, propuestas, subcategoría) para verlos todos. Más consultas = más completo pero más lento (~1,5 s c/u). | |
| max_propuestas | No | Descarta proyectos con más propuestas que esto. | |
| tarifa_min_hora | No | Descarta proyectos por hora cuya tarifa máxima sea menor (USD/h). | |
| pocas_propuestas | No | Solo proyectos con 0-4 propuestas. | |
| presupuesto_min_usd | No | Descarta proyectos de precio fijo cuyo máximo sea menor. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld and the safety profile, but the description adds the non-obvious behavior that results carry a computed opportunity score across five factors, and that it reads only the public listing. Rate-limit/scraping details live in the schema, not here, so it is not fully self-contained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences: the first front-loads purpose plus the scoring behavior, the second handles scope and the alternative. No filler, and the most decision-relevant content comes first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described, and the annotations plus the description cover the safety and scope profile. The only gap is that it does not point to the remaining sibling tools or note result volume limits, which the schema partially covers.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 16 parameters with enums, defaults, and semantics (e.g. max_consultas explains the request-splitting behavior). The description adds no parameter-level detail beyond loosely naming the scoring factors, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Busca), resource (proyectos abiertos en Workana), and an added behavior (scoring 0-100 by fit/competition/budget/client/freshness). It explicitly names the sibling workana_evaluar_proyecto as the tool for client data, so an agent can distinguish it without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names a concrete alternative and the condition that routes to it ('para datos del cliente... usa workana_evaluar_proyecto') and scopes the tool with 'Solo lee el listado público'. It does not mention the other siblings (workana_mejores_oportunidades, workana_ver_proyecto), so guidance is strong but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workana_evaluar_proyectoARead-onlyIdempotent
Analiza a fondo un proyecto y dice si vale la pena postularse: puntaje 0-100 con desglose (encaje de skills, competencia, presupuesto, calidad del cliente, frescura), alertas (pago fuera de Workana, trabajo gratis, contacto por WhatsApp…), puntos a favor/en contra y consejos para la propuesta.
| Name | Required | Description | Default |
|---|---|---|---|
| formato | No | 'markdown' o 'json'. | markdown |
| proyecto | Yes | URL del proyecto o su slug. | |
| mis_skills | No | Tu stack. Vacío = perfil por defecto (React, Node, TypeScript, Next, Express…). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description goes further by disclosing what the analysis actually surfaces — scoring dimensions and specific risk alerts such as off-platform payment, unpaid work and WhatsApp contact — which is genuine behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that names the action first and then packs the scoring dimensions and alert types into a tight parenthetical list. Dense but every clause carries information; nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description still communicates the shape of the result (score, breakdown, alerts, advice), and annotations cover the safety profile. The one gap is routing guidance relative to its siblings, so an agent knows when this analysis is warranted versus a plain project fetch.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: 'proyecto', 'mis_skills' (with default-profile fallback) and 'formato' are all documented in the schema itself. The description adds no parameter-level detail, so the baseline 3 applies — the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Analiza a fondo un proyecto') and enumerates the concrete output: a 0-100 score with a breakdown across five dimensions, alerts, pros/cons and proposal tips. That is far more specific than a bare title, though it never explicitly contrasts itself with siblings like workana_ver_proyecto or workana_mejores_oportunidades.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: it's clearly the 'should I apply?' tool, which sits after ver_proyecto and alongside mejores_oportunidades. But there is no explicit when-to-use, when-not-to-use, or named alternative, leaving the agent to infer the routing from the sibling names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workana_mejores_oportunidadesARead-onlyIdempotent
Flujo completo para el día: busca proyectos recientes de tu stack, descarta los malos (presupuesto bajo, demasiada competencia), analiza a fondo los mejores N (incluye historial de pagos del cliente) y los devuelve ordenados por puntaje con alertas y consejos. Ideal para una revisión diaria.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | Cuántos proyectos analizar a fondo (1 petición extra c/u). | |
| texto | No | Texto libre opcional. | |
| idioma | No | Idioma del proyecto. | es |
| skills | No | Skills de Workana (se combinan con O). Acepta nombres ('React', 'Node.js', 'TypeScript') o slugs ('react-js', 'node-js', 'typescript', 'next-js', 'express-js', 'nest-js', 'javascript', 'react-native', 'vue-js', 'angular', 'mongodb', 'mysql', 'sql', 'api', 'rest-api', 'firebase', 'docker', 'python', 'php', 'laravel', 'wordpress', 'shopify', 'chatbot', 'web-scraping'). Vacío = tu stack por defecto (React, Node, TypeScript, Next, Express, Nest). Pasa [] junto con 'texto' para buscar solo por texto. | |
| formato | No | 'markdown' o 'json'. | markdown |
| modalidad | No | Tipo de contrato. | |
| mis_skills | No | Tu stack. Vacío = perfil por defecto. | |
| publicados | No | Antigüedad máxima. | 3d |
| max_consultas | No | Máximo de peticiones al listado. Sin sesión Workana oculta 13 de cada 20 resultados, así que el servidor divide la búsqueda (por skill, modalidad, propuestas, subcategoría) para verlos todos. Más consultas = más completo pero más lento (~1,5 s c/u). | |
| max_propuestas | No | Descarta proyectos con más propuestas. | |
| tarifa_min_hora | No | Mínimo para proyectos por hora (USD/h). | |
| presupuesto_min_usd | No | Mínimo para proyectos de precio fijo (USD). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safe, read-only, idempotent, open-world profile. The description goes beyond them by disclosing what the deep analysis actually does — it pulls the client's payment history and returns score-ordered results with alerts and tips, and it filters out low-budget / high-competition listings. It does not mention cost/time behavior, but that lives in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences, front-loaded with the action sequence and closed with the use case. No filler, and the ordered pipeline structure mirrors how the tool actually executes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be re-explained, and the description still usefully notes the ranking and alert content. For a 12-parameter, session-dependent scraping tool the remaining gaps (pagination cost, session caveats) are covered by the schema, so the description is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 12 parameters are already documented by the schema; baseline is 3. The description adds only a loose conceptual mapping ('mejores N' -> top, the 'presupuesto bajo / demasiada competencia' filter -> presupuesto_min_usd / max_propuestas) without adding syntax or format detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific composite verb chain — search recent projects, discard bad ones, deeply analyze the best N, return them ranked — so an agent understands this is an orchestrating pipeline rather than a single lookup. It differentiates from the granular siblings (buscar/ver/evaluar) only implicitly by calling itself a 'flujo completo', but never names them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear usage context ('Flujo completo para el día... Ideal para una revisión diaria'), which tells the agent this is a broad daily-sweep call. However, with three directly related siblings it never explains when to prefer workana_buscar_proyectos or workana_evaluar_proyecto instead, so the routing decision is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workana_ver_proyectoBRead-onlyIdempotent
Ficha completa de un proyecto: descripción entera, skills, presupuesto, propuestas, freelancers interesados, y datos del cliente (país, calificación, proyectos publicados/pagados, miembro desde, pago verificado, otros proyectos).
| Name | Required | Description | Default |
|---|---|---|---|
| formato | No | 'markdown' o 'json'. | markdown |
| proyecto | Yes | URL del proyecto (https://www.workana.com/job/...) o su slug. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered structurally. The description adds only a catalog of returned fields and no behavioral context such as rate limits, auth requirements, or whether missing projects error out.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that leads with the core purpose and then enumerates contents without filler. It is appropriately sized, though the long field inventory borders on restating the output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not explain return values, and the annotations cover the safety profile, so it is largely complete for a read-only viewer. The enumeration of returned fields is somewhat redundant with the output schema, but nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: the schema already documents 'proyecto' as a URL or slug and 'formato' as markdown/json. The description adds no syntax, format, or default guidance beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (ver/ficha completa de un proyecto) and enumerates exactly what the record contains (descripción, skills, presupuesto, propuestas, freelancers, datos del cliente). It is immediately clear what the tool returns, but it never distinguishes itself from siblings like workana_evaluar_proyecto or workana_buscar_proyectos.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use, when-not-to-use, or alternative routing guidance. It does not tell the agent to prefer workana_evaluar_proyecto for scoring or workana_buscar_proyectos for discovery, leaving the choice entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v0.1.0- First observed
workana_buscar_proyectos - First observed
workana_evaluar_proyecto - First observed
workana_mejores_oportunidades - First observed
workana_ver_proyecto
TDQS
Scored across 4 tools
The four tools operate at distinct scopes: listing search, single-project detail, deep evaluation, and a batch daily workflow. However, three of them emit a 0-100 opportunity score (buscar, evaluar, mejores_oportunidades), which risks confusion about which to use, though the descriptions cross-reference each other to clarify.
All tools share the workana_ prefix and use Spanish naming, and three follow a verb_noun pattern (buscar_proyectos, ver_proyecto, evaluar_proyecto). The fourth, mejores_oportunidades, breaks the verb pattern with a noun phrase, a minor deviation.
Four tools is on the lean side but each has a clear role in the search/evaluate pipeline. Nothing feels redundant enough to remove, though the surface is slightly thin for a job-hunting workflow.
The surface covers discovery and evaluation well, but there is no tool to actually submit a proposal or save/bookmark projects, despite the tools repeatedly referencing 'postularse' (applying). This is a notable gap in the lifecycle.
Maintenance
Related MCP Connectors
Read-only AI project discovery, verification, comparison, shortlisting, and stack planning.
Public read-only discovery of agent, model, training, task, and verification opportunities.
Read-only access to your Citlyze workspace: AI search visibility, citations, and recommendations.
Free, read-only access to job listings rated by AI level, from Little AI to Builds AI.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables AI clients to read and query a daily job-scan dataset via four read-only tools, including searching job postings, viewing the latest report, and checking market statistics.4MIT
- FlicenseNot gradedqualityBmaintenanceEnables AI agents to search a shared catalog of projects, roles, orders, participants, and mentors, create and update listings or profiles, draft proposals, and search and apply across external freelance and job platforms while keeping platform credentials local.13-
- AlicenseNot gradedqualityCmaintenanceEnables any MCP host to search job listings and retrieve individual job details from a public job board's API/RSS through standardized tools. It provides read-only search and detail lookup with polite rate limiting and remote/location filtering.MIT
- AlicenseNot gradedqualityCmaintenanceEnables agents to search and retrieve public job listings from web3.career through the search_jobs and get_job tools, with keyword, location, remote, date, and limit filters. It is read-only, returns structured job details such as title, company, location, and apply URL, and works with any MCP host.MIT