kwork-mcp
This MCP server provides 28 tools to interact with the Kwork freelance marketplace, enabling you to manage your freelance activity end-to-end.
Profile Management
View your profile details (rating, balance, order stats) and connects balance
Look up any user by ID or username, or search users by name
Projects
Browse and search projects with filters (category, budget range, hiring rate, max offers, text query)
Get detailed project info by ID and view exchange marketplace statistics
Offers
List your submitted offers, view offer details, submit new offers (costs 1 connect), and delete existing ones
Orders
List your seller orders, view detailed order info (description, stages, history), and submit completed work for buyer approval
Dialogs & Messages
List conversations with unread counts, read messages in a dialog, send/edit/delete messages, and mark dialogs as read
Kworks (Services)
List your kworks grouped by status, view kwork details (reviews, FAQ), and activate or pause kworks
Categories
Browse the full category tree and view your favorite categories
Notifications
Access your notifications for orders, messages, and system alerts
Click on "Install 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., "@kwork-mcpfind Python programming projects"
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.
kwork-mcp 1.0 — production-grade stdio MCP-шлюз к Kwork для работы из Codex. Он
даёт типизированные read-результаты, проверяет фактический аккаунт, координирует
лимиты между процессами и проводит все записи через durable prepare → commit → reconcile.
Это breaking redesign. Для миграции с 0.2.x см. руководство по миграции.
Что гарантирует шлюз
structuredContentсоответствует объявленномуoutputSchema; текстовыйcontentсохраняет краткое резюме и JSON-копию результата.Read-операции различают
known_data,known_emptyиunknown_error; ошибки возвращаются сisError=trueи стабильным кодом.Перед каждым write заново проверяются
KWORK_EXPECTED_USER_IDи фактический аккаунт. БезKWORK_ENABLE_WRITES=trueзапись невозможна.Точный payload, его SHA-256, TTL, confirmation token и idempotency key связаны в общем SQLite ledger. Одну операцию выполняет только один процесс.
Неоднозначный результат записи не повторяется автоматически: состояние
submission_unknownтребуетreconcile_write.Лимиты account/route, защита от burst и circuit breaker общие для всех процессов, использующих один
KWORK_STATE_DIR; fingerprint общей policy не позволяет процессу с другими лимитами ослабить координацию.kwork==0.2.0закреплён; сигнатуры и generic routes проверяются fail-loud при старте и contract-тестами.Token и optional proxy сохраняются в account-scoped файлах с
0700/0600,flock, проверкой всей ancestor chain,O_NOFOLLOW/FD-anchored traversal и atomic replace. Runtime-discovered credentials динамически редактируются в логах и внешних данных.Тексты проектов, профилей, сообщений и уведомлений помечаются
external_untrustedи не являются инструкциями для агента.
Related MCP server: upwork-mcp
Установка
Требуются Python 3.12–3.14 и uv.
uvx --from kwork-mcp==1.0.0rc1 kwork-mcp-bootstrap --helpИз исходников:
git clone https://github.com/simonether/kwork-mcp.git
cd kwork-mcp
uv sync --locked --dev
uv run kwork-mcp-bootstrap --helpkwork-mcp использует только stdio. Все его логи идут в stderr; stdout
зарезервирован для MCP JSON-RPC. kwork-mcp-bootstrap — отдельная human CLI и не
является MCP transport.
Безопасная конфигурация
Обычный сервер работает без login/password/token/proxy в конфигурации host. Единственный поддерживаемый production flow:
Узнайте стабильный numeric
user_idсвоего аккаунта из настроек/профиля Kwork.Один раз запустите bootstrap из настоящего terminal TTY:
KWORK_EXPECTED_USER_ID=123456 \
uvx --from kwork-mcp==1.0.0rc1 kwork-mcp-bootstrapCLI скрыто запросит login/password, optional phone digits и optional proxy URL,
вызовет только auth + get_me, сверит точный user_id и атомарно запишет
account-bound credential record. Если существует legacy ~/.kwork_token, CLI
предложит явный validated import: только regular file текущего владельца с mode
0600, без symlink. Legacy-файл после успешного импорта намеренно остаётся на
месте, чтобы удаление было отдельным осознанным действием.
Запускайте normal MCP только с безопасными steady-state ключами:
export KWORK_EXPECTED_USER_ID='123456'
export KWORK_PERSIST_TOKEN='true'
export KWORK_ENABLE_WRITES='false'
uvx --from kwork-mcp==1.0.0rc1 kwork-mcpNormal entrypoint fail-closed отклоняет KWORK_LOGIN, KWORK_PASSWORD,
KWORK_TOKEN, KWORK_PHONE_LAST и KWORK_PROXY_URL, даже если они пришли через
environment. Не помещайте эти значения в Codex/Claude MCP config: некоторые hosts
встраивают env map в собственный process argv. .env из cwd никогда не
загружается. Secret values не принимаются через argv.
После запуска вызовите account_status и сверьте user_id. Только затем включайте
KWORK_ENABLE_WRITES=true. KWORK_EXPECTED_USERNAME — дополнительная, более
хрупкая проверка: username может быть переименован, primary identity — numeric ID.
По умолчанию состояние хранится в
$XDG_STATE_HOME/kwork-mcp либо ~/.local/state/kwork-mcp. Это каталог с токенами
и coordination.sqlite3; все процессы одного аккаунта должны использовать один
локальный KWORK_STATE_DIR и одинаковые shared rate/circuit/write settings.
Несовместимый fingerprint отклоняется fail-loud. Файлы содержат чувствительные
данные и не зашифрованы самим приложением — используйте защищённую учётную запись
ОС и шифрование диска. Вся физическая ancestor chain должна принадлежать текущему
user либо root и не быть group/other-writable. Разрешён один стандартный sticky
temp boundary (например, /tmp), после которого gateway создаёт private 0700
каталог; обычный 0777 parent, чужой owner, final symlink или подмена компонента
отклоняются.
Версия 1.0 использует POSIX fcntl/flock и поддерживает Linux/macOS, но не
Windows.
Optional proxy вводится только bootstrap-команде и сохраняется рядом с token в
защищённом account record; normal server не принимает KWORK_PROXY_URL. Legacy
record без proxy означает прямое подключение. Чтобы добавить, заменить или удалить
proxy либо обновить истёкшую сессию, остановите процессы этого account/state,
повторите bootstrap и перезапустите MCP. Файл защищён правами ОС, но не шифруется
на уровне приложения.
Полный справочник: docs/configuration.md.
Подключение к Codex
Сначала выполните bootstrap в обычном терминале, как показано выше. Затем добавьте
в ~/.codex/config.toml только безопасные значения:
[mcp_servers.kwork]
command = "uvx"
args = ["--from", "kwork-mcp==1.0.0rc1", "kwork-mcp"]
[mcp_servers.kwork.env]
KWORK_EXPECTED_USER_ID = "123456"
KWORK_PERSIST_TOKEN = "true"
KWORK_ENABLE_WRITES = "false"Для локальной checkout-версии:
[mcp_servers.kwork]
command = "uv"
args = ["--directory", "/absolute/path/to/kwork-mcp", "run", "kwork-mcp"]
[mcp_servers.kwork.env]
KWORK_EXPECTED_USER_ID = "123456"
KWORK_PERSIST_TOKEN = "true"
KWORK_ENABLE_WRITES = "false"Codex CLI, IDE extension и desktop app используют общую MCP-конфигурацию host.
После изменения перезапустите соответствующий клиент и вызовите account_status.
Никогда не добавляйте туда token/login/password/phone/proxy — ни как env, ни как
env_vars, ни как arguments.
MCP tools
Read-only
Tool | Результат |
| Фактический account ID, binding и готовность writes |
| Активные и общие коннекты |
| Профиль/поиск пользователей |
|
|
| Проект и полная exchange-информация |
| Офферы с обязательными |
| Заказы продавца и полные details |
| Диалоги и сообщения |
| Собственные кворки |
| Категории |
| Полные группы уведомлений |
discover_projects не смешивает режимы:
favorites— избранные категории аккаунта;all— вся биржа;category_ids— обязательный непустой список ID.
Возвращаемый PageInfo содержит next_cursor, query_fingerprint и
high_watermark. Cursor подписан и привязан к подтверждённому аккаунту и точным
фильтрам. Watermark позволяет клиенту вести локальную точку наблюдения для
будущего delta polling, но 1.0 не обещает отдельный delta endpoint.
Safe write-flow
Поддерживаемые request.action: submit_offer, delete_offer, send_message,
edit_message, delete_message, mark_dialog_read, submit_order_approval,
set_kwork_state.
Вызовите
prepare_writeс точным request и собственным стабильнымidempotency_key.Проверьте возвращённые
payload,payload_hash, account ID иexpires_at.Передайте неизменённые
write_id,payload_hashиconfirmation_tokenвcommit_write.Если state равен
submission_unknown, не вызывайте commit повторно. После visibility window вызовитеreconcile_write(write_id).get_write_statusчитает durable ledger без remote write.
Пример payload для подготовки оффера:
{
"request": {
"action": "submit_offer",
"project_id": 123,
"title": "Точное название предложения",
"description": "Описание длиной не менее 150 символов, соответствующее проекту и не содержащее секретов.",
"price": 10000,
"duration_days": 5
},
"idempotency_key": "project-123-offer-v1"
}Remote write никогда не retry автоматически. Повторный prepare_write с тем же
idempotency key и другим request возвращает idempotency_conflict; пока исходная
запись остаётся prepared, точный replay того же request возвращает ту же запись и
тот же HMAC-derived confirmation token. Это позволяет безопасно восстановиться
после потери ответа prepare, не создавая второй intent. После claim/terminal state
confirmation token больше не выдаётся; состояние читается через
get_write_status.
Модель результата и ошибок
Каждый tool возвращает envelope версии 1.0:
{
"schema_version": "1.0",
"knowledge_state": "known_data",
"summary": "…",
"data": {},
"error": null,
"meta": {
"source": "kwork",
"content_trust": "external_untrusted",
"observed_at": "…",
"correlation_id": "…",
"upstream_contract": "kwork==0.2.0"
}
}Коды ошибок и retry/reconciliation semantics описаны в
docs/security.md.
Неизвестное имя tool является protocol-level JSON-RPC -32602, а не обычным
isError business-result; имя из недоверенного запроса намеренно не отражается в
сообщении.
Архитектура и границы
Шлюз отвечает за MCP transport, авторизацию Kwork, account binding, корректность upstream-контракта, типизацию данных и безопасную доставку write-запроса. Он намеренно не содержит скоринг проектов, Notion, Telegram, email, CRM и другую pipeline/business logic.
MCP Tasks отключены. Стабильная спецификация считает их экспериментальными, а Codex-клиенту для коротких Kwork API-вызовов durable task lifecycle не даёт пользы. Durability write-flow реализована внутри ledger и доступна обычными tools без нестабильного protocol surface.
Подробнее: архитектура и security model.
Разработка
uv sync --locked --dev
uv run ruff check .
uv run ruff format --check .
uv run mypy
uv run pytest tests/ -v --cov=kwork_mcp --cov-report=term-missing
uv build
uv run twine check dist/*
uv run check-wheel-contents dist/*.whlCoverage gate — 92% branch-aware покрытия. CI дополнительно проверяет Python 3.12–3.14, зависимости, секреты, pinned MCP Registry schema, wheel install smoke и согласованность версий.
Лицензия
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityCmaintenanceMCP server for searching Fiverr gigs, comparing freelancer packages, reading seller reviews, and exploring service categories. Provides structured tools for gig search, details, seller profiles, reviews, and category browsing with built-in anti-bot handling.Last updated56MIT
- Alicense-quality-maintenanceAn MCP server for automating Upwork workflows including job search, proposal submission, client communication, and contract management. It provides tools for client vetting, template-based proposals, and session safety with audit logging.Last updated
- AlicenseAqualityAmaintenanceUniversal MCP server for the Avito API (Russia's largest classifieds marketplace), built for autonomous AI agents to operate an account hands-free — 145 tools across 18 domains (listings, messenger, orders, delivery, promotion, autoload, reviews, analytics). Safe-by-default: dry-run, idempotency, structured errors, confirmation flow.Last updated10028610MIT
- Flicense-qualityFmaintenanceMCP server for the Upwork GraphQL API enabling job search, contract management, proposal drafting, and other Upwork automation tasks via natural language.Last updated
Related MCP Connectors
Hosted Amazon Seller and Vendor MCP server for Claude, ChatGPT, Cursor, Codex, Gemini, Copilot.
A MCP server built for developers enabling Git based project management with project and personal…
MCP server for Klever blockchain smart contract development.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/simonether/kwork-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server