Kwork freelance marketplace: browse projects, submit offers, manage orders, message clients
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent — or use 1-click editor setup below.
💡 Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
kwork-mcp 1.0 — production-grade stdio MCP-шлюз к Kwork для работы из Codex. Он
даёт типизированные read-результаты, проверяет фактический аккаунт, координирует
лимиты между процессами и проводит все записи через durable prepare → commit → reconcile.
Это breaking redesign. Для миграции с 0.2.x см. руководство по миграции.
structuredContent соответствует объявленному outputSchema; текстовый content
сохраняет краткое резюме и JSON-копию результата.known_data, known_empty и unknown_error; ошибки
возвращаются с isError=true и стабильным кодом.KWORK_EXPECTED_USER_ID и фактический
аккаунт. Без KWORK_ENABLE_WRITES=true запись невозможна.submission_unknown требует reconcile_write.KWORK_STATE_DIR; fingerprint общей policy не позволяет
процессу с другими лимитами ослабить координацию.kwork==0.2.0 закреплён; сигнатуры и generic routes проверяются fail-loud при
старте и contract-тестами.0700/0600,
flock, проверкой всей ancestor chain, O_NOFOLLOW/FD-anchored traversal и
atomic replace. Runtime-discovered credentials динамически редактируются в логах
и внешних данных.external_untrusted и не являются инструкциями для агента.Требуются Python 3.12–3.14 и uv.
Из исходников:
kwork-mcp использует только stdio. Все его логи идут в stderr; stdout
зарезервирован для MCP JSON-RPC. kwork-mcp-bootstrap — отдельная human CLI и не
является MCP transport.
Обычный сервер работает без login/password/token/proxy в конфигурации host. Единственный поддерживаемый production flow:
user_id своего аккаунта из настроек/профиля Kwork.CLI скрыто запросит 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 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.
Сначала выполните bootstrap в обычном терминале, как показано выше. Затем добавьте
в ~/.codex/config.toml только безопасные значения:
Для локальной checkout-версии:
Codex CLI, IDE extension и desktop app используют общую MCP-конфигурацию host.
После изменения перезапустите соответствующий клиент и вызовите account_status.
Никогда не добавляйте туда token/login/password/phone/proxy — ни как env, ни как
env_vars, ни как arguments.
| Tool | Результат |
|---|---|
account_status | Фактический account ID, binding и готовность writes |
get_connects | Активные и общие коннекты |
get_user_info, search_users | Профиль/поиск пользователей |
discover_projects | favorites, all или category_ids, фильтры и opaque cursor |
get_project, get_exchange_info | Проект и полная exchange-информация |
list_my_offers, get_offer | Офферы с обязательными offer_id и project_id |
list_worker_orders, get_order_details | Заказы продавца и полные details |
list_dialogs, get_dialog | Диалоги и сообщения |
list_my_kworks, get_kwork_details | Собственные кворки |
list_categories, list_favorite_categories | Категории |
list_notifications | Полные группы уведомлений |
discover_projects не смешивает режимы:
favorites — избранные категории аккаунта;all — вся биржа;category_ids — обязательный непустой список ID.Возвращаемый PageInfo содержит next_cursor, query_fingerprint и
high_watermark. Cursor подписан и привязан к подтверждённому аккаунту и точным
фильтрам. Watermark позволяет клиенту вести локальную точку наблюдения для
будущего delta polling, но 1.0 не обещает отдельный delta endpoint.
Поддерживаемые 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.submission_unknown, не вызывайте commit повторно. После
visibility window вызовите reconcile_write(write_id).get_write_status читает durable ledger без remote write.Пример payload для подготовки оффера:
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:
No reviews yet — be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/kwork)<a href="https://allmcps.com/mcp/kwork"><img src="https://allmcps.com/api/badge/kwork?style=directory" alt="Kwork on AllMCPs" /></a>