关于 Kwork
Kwork 是将 Kwork 自由职业平台账户接入 MCP 客户端的 stdio 服务,供 Agent 查询项目、对话、订单和报价。写入默认需确认,并通过两阶段发送和结果核对降低重复操作风险。
主要功能
- 01搜索项目并查看筛选结果
- 02读取对话、订单和报价
- 03管理消息与项目响应
- 04写入前展示内容并确认
- 05跟踪并核对发送结果
适用场景
- 01筛选符合预算的自由职业项目
- 02检查未读对话和待处理订单
- 03准备报价后确认再发送
MCP 相关
该 MCP 服务向 MCP 客户端提供 Kwork 账户查询和操作工具。写入可设为确认、自动或关闭,并支持准备、提交及核对操作。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx kwork-mcpKWORK_EXPECTED_USER_IDKwork user ID to serve; optional when kwork-mcp login bound a single account, required when several are boundKWORK_EXPECTED_USERNAMEOptional second account identity checkKWORK_WRITESSending to Kwork: confirm asks the user before each send (client dialog or chat), auto lets the agent send, off is read-onlyKWORK_SITEKwork site: ru (kwork.ru) or com (kwork.com); kwork.com has no project exchangeKWORK_TIMEOUTKwork request timeout in seconds (1-120)KWORK_STATE_DIRAbsolute private directory shared by gateway processes for the same accountKWORK_PERSIST_TOKEN密钥Use the verified account-scoped credential store; required for normal server startupKWORK_RPS_LIMITShared account-level token refill rateKWORK_BURST_LIMITShared account-level token bucket capacityKWORK_ROUTE_RPS_LIMITShared per-route token refill rateKWORK_ROUTE_BURST_LIMITShared per-route token bucket capacityKWORK_RATE_WAIT_TIMEOUTMaximum seconds to wait for shared rate-limit admissionKWORK_AUTH_LOCK_TIMEOUT密钥Maximum seconds to wait for account credential-store authentication coordinationKWORK_READ_ATTEMPTSMaximum attempts for retry-safe read requests onlyKWORK_RETRY_BACKOFF_BASEInitial retry backoff for retry-safe reads, in secondsKWORK_RETRY_BACKOFF_MAXMaximum retry backoff for retry-safe reads, in secondsKWORK_CIRCUIT_FAILURE_THRESHOLDShared route failures before opening the circuitKWORK_CIRCUIT_OPEN_SECONDSBase shared circuit-open interval in secondsKWORK_PREPARATION_TTL_SECONDSSafe write preparation lifetimeKWORK_WRITE_LEASE_SECONDSDurable one-writer lease duration in secondsKWORK_RECONCILIATION_MIN_AGE_SECONDSMinimum age before ambiguous-write read-back (1-300 seconds)KWORK_RECONCILIATION_ABSENCE_CONFIRMATIONSComplete absent observations required before a terminal resultKWORK_RECONCILIATION_ABSENCE_INTERVAL_SECONDSMinimum interval between absent observations (1-300 seconds)KWORK_STATE_RETENTION_DAYSRetention for terminal durable write recordsKWORK_LOG_LEVELGateway stderr log level: DEBUG, INFO, WARNING or ERROR本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
22收录的工具列表 · 更新于 2 周前
此工具无需参数。
详细介绍
kwork-mcp 将您的 Kwork 账号连接到 AI Agent:Claude
Code、Claude Desktop、Codex、Cursor 和其他 MCP 客户端。Agent 可以在交易平台上搜索项目、
查看对话、订单和报价,并准备回复。默认情况下,只有在您对确切文本说“是”之后,Agent
才会在 Kwork 上发送内容。
项目网站:simonether.github.io/kwork-mcp。
可以让 Agent 做什么
- “找找预算不低于 20 000 ₽ 的 Telegram 机器人相关新项目,并告诉我哪些适合我。”
- “显示有未读消息的对话,并建议如何回复。”
- “我的订单怎么样?哪些订单正在等待我处理?”
- “我有多少个连接点?我的哪些回复还在等待处理?”
- “为项目 3257238 准备回复:15 000 ₽,5 天”——Agent 会显示确切文本和价格,只有在您说“是”后才会发送。
快速开始
需要 macOS 或 Linux、Python 3.12–3.14 和 uv。 不支持 Windows。
1. 登录 Kwork(仅需一次)
在普通终端中:
uvx [email protected] login
命令会以隐藏方式询问您的 Kwork 登录名和密码,也会询问(可选)电话号码的后 4 位和代理,并显示找到的账号:
Найден аккаунт Kwork: your_name (user_id=123456). Привязать его? [y/N]: да
确认后,令牌会保存到您电脑上的安全存储中
(~/.local/state/kwork-mcp)。登录名和密码不会保存在任何地方。最后,命令会
打印 Claude Code 和 Codex 的连接命令,以及适用于 Claude Desktop 和 Cursor 的配置块。
2. 连接 Agent
Claude Code:
claude mcp add kwork --scope user -- uvx [email protected]
Codex:
codex mcp add kwork -- uvx [email protected]
Claude Desktop 和其他客户端
Claude Desktop:Settings → Developer → Edit Config,文件为 claude_desktop_config.json。
Cursor(不使用按钮):~/.cursor/mcp.json 或项目的 .cursor/mcp.json。
{
"mcpServers": {
"kwork": {
"command": "uvx",
"args": ["[email protected]"]
}
}
}
Claude Desktop 无法从终端找到 uvx,因此请使用 login 输出中的配置块:
其中已包含 uvx 的完整路径。
服务会自动找到您登录的账号。如果您登录过多个账号,请指定所需账号:-e KWORK_EXPECTED_USER_ID=123456,或在
JSON 中使用 "env" 块。
不要将登录名、密码、令牌和代理添加到客户端配置中:否则服务会拒绝启动。
3. 检查
重启客户端,并向 Agent 询问:“检查 Kwork 账号状态。”它会调用 account_status,并显示您的
user_id 和姓名。
不使用客户端时,也可以在终端中查看同样的信息:uvx [email protected] status 会显示服务将使用哪个账号和网站启动,而不会访问 Kwork。切换账号:
uvx [email protected] logout,然后重新执行 login。
Отправка откликов и сообщений
Отправку на Kwork (отклики, сообщения, удаление офферов, сдача заказа, запуск и
пауза кворков) задаёт переменная KWORK_WRITES:
KWORK_WRITES | Что происходит |
|---|---|
confirm (по умолчанию) | Перед каждой отправкой агент показывает точный текст, цену и получателя и ждёт вашего «да» |
auto | Агент отправляет сам, когда это нужно для вашей задачи, без отдельного подтверждения |
off | Только чтение: инструменты отправки скрыты, агент их не видит |
В режиме confirm сервер в ответе prepare_write и в своих инструкциях
указывает агенту показать вам запрос и отправлять только после вашего «да». Сам
проверить это «да» сервер не может. Вторую кнопку даёт клиент: Claude Code и
Claude Desktop по умолчанию спрашивают разрешение перед инструментом отправки, а в
Codex то же включает default_tools_approval_mode = "writes" в настройках
сервера [mcp_servers.kwork].
Режим выбирается в конфиге клиента, например для Claude Code:
claude mcp remove kwork --scope user
claude mcp add kwork --scope user -e KWORK_WRITES=auto -- uvx [email protected]
В режиме auto от чужих команд в текстах проектов и сообщений защищает только
поведение агента: сервер помечает эти тексты как внешние данные, но проверить,
что агент их не послушал, не может.
Каждая отправка идёт в два шага: сначала агент готовит точный запрос, затем выполняет его. Сервер помнит каждую запись и никогда не повторяет её сам.
Если связь оборвалась в момент отправки, результат становится «неизвестным», и агент сверяет его с Kwork, прежде чем делать что-то ещё. Пока такая запись не сверена, новые отправки для аккаунта заблокированы, чтобы не создать дубль.
kwork.com
По умолчанию сервер работает с kwork.ru. Для kwork.com добавьте в конфиг клиента
KWORK_SITE=com. Например, для Claude Code вторым сервером рядом с kwork.ru:
claude mcp add kwork-com --scope user -e KWORK_SITE=com -- uvx [email protected]
Аккаунт и токен у kwork.ru и kwork.com общие, поэтому заново входить не нужно.
Биржи проектов на kwork.com нет: поиск проектов, избранные категории и отклик на
проект там отвечают site_unsupported. Диалоги, заказы и кворки работают как
обычно, но заказы у каждого сайта свои. Запись, подготовленную для одного сайта,
отправляет и сверяет только сервер того же сайта.
Если что-то не работает
| Что видите | Что делать |
|---|---|
auth_required или auth_expired | Входа нет или он истёк: выполните uvx [email protected] login и перезапустите клиент |
account_binding_required | Вы входили в несколько аккаунтов: укажите нужный в KWORK_EXPECTED_USER_ID или удалите лишний вход командой uvx [email protected] logout <user_id> |
| Непонятно, какой аккаунт и сайт использует сервер | uvx [email protected] status покажет это без запросов к Kwork |
| Сервер не стартует, «некорректная конфигурация: …» | Проверьте названные переменные KWORK_* в конфиге клиента |
| «KWORK_ENABLE_WRITES удалена в 1.5.0» | Замените её на KWORK_WRITES=off, confirm или auto |
write_disabled | Сервер запущен с KWORK_WRITES=off, доступно только чтение |
captcha | Войдите в Kwork в браузере, пройдите капчу, затем повторите login |
| Claude Desktop не видит сервер | Возьмите блок для Claude Desktop из вывода login (в нём полный путь к uvx) или укажите путь из which uvx, затем перезапустите приложение |
ambiguous_write с related_write_id | Отправка с неизвестным результатом блокирует новые. Попросите агента выполнить reconcile_write для этого ID |
| Сверка долго не сходится | Проверьте операцию на сайте Kwork, указанном в поле site у pending-writes, и зафиксируйте исход вручную (команды ниже) |
Ручная фиксация исхода запускается с теми же KWORK_* переменными, что у сервера:
uvx [email protected] pending-writes
uvx [email protected] resolve-write <write_id> succeeded # операция на Kwork прошла
uvx [email protected] resolve-write <write_id> absent # операции на Kwork нет
Инструменты
Чтение:
| Инструмент | Что делает |
|---|---|
account_status | Какой аккаунт подключён, включена ли запись, есть ли несверенные отправки |
get_connects | Баланс коннектов |
discover_projects, get_project | Проекты биржи: избранные категории, вся биржа или выбранные категории, фильтры по цене и откликам |
get_exchange_info | Сводка по бирже |
list_my_offers, get_offer | Ваши отклики |
list_worker_orders, get_order_details | Ваши заказы как продавца |
list_dialogs, get_dialog | Диалоги и сообщения |
list_my_kworks, get_kwork_details | Ваши кворки |
get_user_info, search_users | Профили пользователей |
list_categories, list_favorite_categories | Категории |
list_notifications | Уведомления |
Запись: prepare_write → commit_write, а также get_write_status и
reconcile_write. Поддерживаются отклик на проект, удаление отклика, отправка,
правка и удаление сообщения, отметка диалога прочитанным, сдача заказа на проверку
и запуск или пауза кворка.
Безопасность
- Логин, пароль и прокси вводятся только в
kwork-mcp loginчерез скрытый ввод и не попадают в конфиг клиента. - Сервер работает только с аккаунтом, который вы подтвердили при входе (если
аккаунтов несколько, с указанным в
KWORK_EXPECTED_USER_ID), и проверяет его перед каждой записью. - Тексты проектов, профилей и сообщений помечаются как внешние данные, а не инструкции для агента.
- Токен лежит в файлах с правами
0600. Приложение их не шифрует, поэтому используйте шифрование диска. - Лимиты запросов к Kwork общие для всех процессов одного аккаунта.
Подробно: модель безопасности, настройки, архитектура, переход с 0.2.x.
Разработка
git clone https://github.com/simonether/kwork-mcp.git
cd kwork-mcp
uv sync --locked --dev
uv run ruff check . && uv run ruff format --check .
uv run mypy
uv run pytest tests/ -q --cov=kwork_mcp
Для запуска из исходников в конфиге клиента используйте
uv --directory /path/to/kwork-mcp run kwork-mcp вместо uvx. Правила для
изменений и устройство кода описаны в AGENTS.md.
Лицензия
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。