Kwork MCP
A community-built stdio MCP server that connects a user's Kwork freelance marketplace account to AI agents like Claude Code, Codex, and Cursor. It allows agents to search for projects, read dialogues and orders, prepare responses, and manage offers, with safety controls requiring user confirmation before sending any data to Kwork.
Package and access
Local package with source-attributed installation metadata. Koskamo does not execute packages during review.
What you can do with it
- Search for fresh projects with specific budgets and topics
- View dialogues with unread messages and suggest replies
- Check order status and pending actions
- Prepare a response for a specific project ID
Source and maintenance
- Maintenance checked
Packages and installation
Source-provided package data. Koskamo has not executed or live-probed this package.
kwork-mcp 1.5.2
{
"version": "1.5.2",
"transport": "stdio",
"identifier": "kwork-mcp",
"runtimeHint": "uvx",
"registryType": "pypi",
"environmentVariables": [
{
"name": "KWORK_EXPECTED_USER_ID",
"description": "Kwork user ID to serve; optional when kwork-mcp login bound a single account, required when several are bound"
},
{
"name": "KWORK_EXPECTED_USERNAME",
"description": "Optional second account identity check"
},
{
"name": "KWORK_WRITES",
"choices": [
"confirm",
"auto",
"off"
],
"default": "confirm",
"description": "Sending to Kwork: confirm asks the user before each send (client dialog or chat), auto lets the agent send, off is read-only"
},
{
"name": "KWORK_SITE",
"choices": [
"ru",
"com"
],
"default": "ru",
"description": "Kwork site: ru (kwork.ru) or com (kwork.com); kwork.com has no project exchange"
},
{
"name": "KWORK_TIMEOUT",
"default": "30",
"description": "Kwork request timeout in seconds (1-120)"
},
{
"name": "KWORK_STATE_DIR",
"description": "Absolute private directory shared by gateway processes for the same account"
},
{
"name": "KWORK_PERSIST_TOKEN",
"default": "true",
"description": "Use the verified account-scoped credential store; required for normal server startup"
},
{
"name": "KWORK_RPS_LIMIT",
"default": "2",
"description": "Shared account-level token refill rate"
},
{
"name": "KWORK_BURST_LIMIT",
"default": "4",
"description": "Shared account-level token bucket capacity"
},
{
"name": "KWORK_ROUTE_RPS_LIMIT",
"default": "1",
"description": "Shared per-route token refill rate"
},
{
"name": "KWORK_ROUTE_BURST_LIMIT",
"default": "2",
"description": "Shared per-route token bucket capacity"
},
{
"name": "KWORK_RATE_WAIT_TIMEOUT",
"default": "20",
"description": "Maximum seconds to wait for shared rate-limit admission"
},
{
"name": "KWORK_AUTH_LOCK_TIMEOUT",
"default": "90",
"description": "Maximum seconds to wait for account credential-store authentication coordination"
},
{
"name": "KWORK_READ_ATTEMPTS",
"default": "3",
"description": "Maximum attempts for retry-safe read requests only"
},
{
"name": "KWORK_RETRY_BACKOFF_BASE",
"default": "0.5",
"description": "Initial retry backoff for retry-safe reads, in seconds"
},
{
"name": "KWORK_RETRY_BACKOFF_MAX",
"default": "8",
"description": "Maximum retry backoff for retry-safe reads, in seconds"
},
{
"name": "KWORK_CIRCUIT_FAILURE_THRESHOLD",
"default": "3",
"description": "Shared route failures before opening the circuit"
},
{
"name": "KWORK_CIRCUIT_OPEN_SECONDS",
"default": "30",
"description": "Base shared circuit-open interval in seconds"
},
{
"name": "KWORK_PREPARATION_TTL_SECONDS",
"default": "600",
"description": "Safe write preparation lifetime"
},
{
"name": "KWORK_WRITE_LEASE_SECONDS",
"default": "120",
"description": "Durable one-writer lease duration in seconds"
},
{
"name": "KWORK_RECONCILIATION_MIN_AGE_SECONDS",
"default": "15",
"description": "Minimum age before ambiguous-write read-back (1-300 seconds)"
},
{
"name": "KWORK_RECONCILIATION_ABSENCE_CONFIRMATIONS",
"default": "2",
"description": "Complete absent observations required before a terminal result"
},
{
"name": "KWORK_RECONCILIATION_ABSENCE_INTERVAL_SECONDS",
"default": "15",
"description": "Minimum interval between absent observations (1-300 seconds)"
},
{
"name": "KWORK_STATE_RETENTION_DAYS",
"default": "30",
"description": "Retention for terminal durable write records"
},
{
"name": "KWORK_LOG_LEVEL",
"default": "INFO",
"description": "Gateway stderr log level: DEBUG, INFO, WARNING or ERROR"
}
]
}Tools
Reported by the attributed source; not independently observed by Koskamo.
Connect from your client
Each snippet configures the same source-provided package; replace placeholders before use.
Cursor
{
"mcpServers": {
"kwork-mcp": {
"command": "uvx",
"args": [
"kwork-mcp==1.5.2"
],
"env": {
"KWORK_EXPECTED_USER_ID": "<YOUR_KWORK_EXPECTED_USER_ID>",
"KWORK_EXPECTED_USERNAME": "<YOUR_KWORK_EXPECTED_USERNAME>",
"KWORK_WRITES": "<YOUR_KWORK_WRITES>",
"KWORK_SITE": "<YOUR_KWORK_SITE>",
"KWORK_TIMEOUT": "<YOUR_KWORK_TIMEOUT>",
"KWORK_STATE_DIR": "<YOUR_KWORK_STATE_DIR>",
"KWORK_PERSIST_TOKEN": "<YOUR_KWORK_PERSIST_TOKEN>",
"KWORK_RPS_LIMIT": "<YOUR_KWORK_RPS_LIMIT>",
"KWORK_BURST_LIMIT": "<YOUR_KWORK_BURST_LIMIT>",
"KWORK_ROUTE_RPS_LIMIT": "<YOUR_KWORK_ROUTE_RPS_LIMIT>",
"KWORK_ROUTE_BURST_LIMIT": "<YOUR_KWORK_ROUTE_BURST_LIMIT>",
"KWORK_RATE_WAIT_TIMEOUT": "<YOUR_KWORK_RATE_WAIT_TIMEOUT>",
"KWORK_AUTH_LOCK_TIMEOUT": "<YOUR_KWORK_AUTH_LOCK_TIMEOUT>",
"KWORK_READ_ATTEMPTS": "<YOUR_KWORK_READ_ATTEMPTS>",
"KWORK_RETRY_BACKOFF_BASE": "<YOUR_KWORK_RETRY_BACKOFF_BASE>",
"KWORK_RETRY_BACKOFF_MAX": "<YOUR_KWORK_RETRY_BACKOFF_MAX>",
"KWORK_CIRCUIT_FAILURE_THRESHOLD": "<YOUR_KWORK_CIRCUIT_FAILURE_THRESHOLD>",
"KWORK_CIRCUIT_OPEN_SECONDS": "<YOUR_KWORK_CIRCUIT_OPEN_SECONDS>",
"KWORK_PREPARATION_TTL_SECONDS": "<YOUR_KWORK_PREPARATION_TTL_SECONDS>",
"KWORK_WRITE_LEASE_SECONDS": "<YOUR_KWORK_WRITE_LEASE_SECONDS>",
"KWORK_RECONCILIATION_MIN_AGE_SECONDS": "<YOUR_KWORK_RECONCILIATION_MIN_AGE_SECONDS>",
"KWORK_RECONCILIATION_ABSENCE_CONFIRMATIONS": "<YOUR_KWORK_RECONCILIATION_ABSENCE_CONFIRMATIONS>",
"KWORK_RECONCILIATION_ABSENCE_INTERVAL_SECONDS": "<YOUR_KWORK_RECONCILIATION_ABSENCE_INTERVAL_SECONDS>",
"KWORK_STATE_RETENTION_DAYS": "<YOUR_KWORK_STATE_RETENTION_DAYS>",
"KWORK_LOG_LEVEL": "<YOUR_KWORK_LOG_LEVEL>"
}
}
}
}Cline
{
"mcpServers": {
"kwork-mcp": {
"command": "uvx",
"args": [
"kwork-mcp==1.5.2"
],
"env": {
"KWORK_EXPECTED_USER_ID": "<YOUR_KWORK_EXPECTED_USER_ID>",
"KWORK_EXPECTED_USERNAME": "<YOUR_KWORK_EXPECTED_USERNAME>",
"KWORK_WRITES": "<YOUR_KWORK_WRITES>",
"KWORK_SITE": "<YOUR_KWORK_SITE>",
"KWORK_TIMEOUT": "<YOUR_KWORK_TIMEOUT>",
"KWORK_STATE_DIR": "<YOUR_KWORK_STATE_DIR>",
"KWORK_PERSIST_TOKEN": "<YOUR_KWORK_PERSIST_TOKEN>",
"KWORK_RPS_LIMIT": "<YOUR_KWORK_RPS_LIMIT>",
"KWORK_BURST_LIMIT": "<YOUR_KWORK_BURST_LIMIT>",
"KWORK_ROUTE_RPS_LIMIT": "<YOUR_KWORK_ROUTE_RPS_LIMIT>",
"KWORK_ROUTE_BURST_LIMIT": "<YOUR_KWORK_ROUTE_BURST_LIMIT>",
"KWORK_RATE_WAIT_TIMEOUT": "<YOUR_KWORK_RATE_WAIT_TIMEOUT>",
"KWORK_AUTH_LOCK_TIMEOUT": "<YOUR_KWORK_AUTH_LOCK_TIMEOUT>",
"KWORK_READ_ATTEMPTS": "<YOUR_KWORK_READ_ATTEMPTS>",
"KWORK_RETRY_BACKOFF_BASE": "<YOUR_KWORK_RETRY_BACKOFF_BASE>",
"KWORK_RETRY_BACKOFF_MAX": "<YOUR_KWORK_RETRY_BACKOFF_MAX>",
"KWORK_CIRCUIT_FAILURE_THRESHOLD": "<YOUR_KWORK_CIRCUIT_FAILURE_THRESHOLD>",
"KWORK_CIRCUIT_OPEN_SECONDS": "<YOUR_KWORK_CIRCUIT_OPEN_SECONDS>",
"KWORK_PREPARATION_TTL_SECONDS": "<YOUR_KWORK_PREPARATION_TTL_SECONDS>",
"KWORK_WRITE_LEASE_SECONDS": "<YOUR_KWORK_WRITE_LEASE_SECONDS>",
"KWORK_RECONCILIATION_MIN_AGE_SECONDS": "<YOUR_KWORK_RECONCILIATION_MIN_AGE_SECONDS>",
"KWORK_RECONCILIATION_ABSENCE_CONFIRMATIONS": "<YOUR_KWORK_RECONCILIATION_ABSENCE_CONFIRMATIONS>",
"KWORK_RECONCILIATION_ABSENCE_INTERVAL_SECONDS": "<YOUR_KWORK_RECONCILIATION_ABSENCE_INTERVAL_SECONDS>",
"KWORK_STATE_RETENTION_DAYS": "<YOUR_KWORK_STATE_RETENTION_DAYS>",
"KWORK_LOG_LEVEL": "<YOUR_KWORK_LOG_LEVEL>"
}
}
}
}VS Code
{
"servers": {
"kwork-mcp": {
"type": "stdio",
"command": "uvx",
"args": [
"kwork-mcp==1.5.2"
],
"env": {
"KWORK_EXPECTED_USER_ID": "<YOUR_KWORK_EXPECTED_USER_ID>",
"KWORK_EXPECTED_USERNAME": "<YOUR_KWORK_EXPECTED_USERNAME>",
"KWORK_WRITES": "<YOUR_KWORK_WRITES>",
"KWORK_SITE": "<YOUR_KWORK_SITE>",
"KWORK_TIMEOUT": "<YOUR_KWORK_TIMEOUT>",
"KWORK_STATE_DIR": "<YOUR_KWORK_STATE_DIR>",
"KWORK_PERSIST_TOKEN": "<YOUR_KWORK_PERSIST_TOKEN>",
"KWORK_RPS_LIMIT": "<YOUR_KWORK_RPS_LIMIT>",
"KWORK_BURST_LIMIT": "<YOUR_KWORK_BURST_LIMIT>",
"KWORK_ROUTE_RPS_LIMIT": "<YOUR_KWORK_ROUTE_RPS_LIMIT>",
"KWORK_ROUTE_BURST_LIMIT": "<YOUR_KWORK_ROUTE_BURST_LIMIT>",
"KWORK_RATE_WAIT_TIMEOUT": "<YOUR_KWORK_RATE_WAIT_TIMEOUT>",
"KWORK_AUTH_LOCK_TIMEOUT": "<YOUR_KWORK_AUTH_LOCK_TIMEOUT>",
"KWORK_READ_ATTEMPTS": "<YOUR_KWORK_READ_ATTEMPTS>",
"KWORK_RETRY_BACKOFF_BASE": "<YOUR_KWORK_RETRY_BACKOFF_BASE>",
"KWORK_RETRY_BACKOFF_MAX": "<YOUR_KWORK_RETRY_BACKOFF_MAX>",
"KWORK_CIRCUIT_FAILURE_THRESHOLD": "<YOUR_KWORK_CIRCUIT_FAILURE_THRESHOLD>",
"KWORK_CIRCUIT_OPEN_SECONDS": "<YOUR_KWORK_CIRCUIT_OPEN_SECONDS>",
"KWORK_PREPARATION_TTL_SECONDS": "<YOUR_KWORK_PREPARATION_TTL_SECONDS>",
"KWORK_WRITE_LEASE_SECONDS": "<YOUR_KWORK_WRITE_LEASE_SECONDS>",
"KWORK_RECONCILIATION_MIN_AGE_SECONDS": "<YOUR_KWORK_RECONCILIATION_MIN_AGE_SECONDS>",
"KWORK_RECONCILIATION_ABSENCE_CONFIRMATIONS": "<YOUR_KWORK_RECONCILIATION_ABSENCE_CONFIRMATIONS>",
"KWORK_RECONCILIATION_ABSENCE_INTERVAL_SECONDS": "<YOUR_KWORK_RECONCILIATION_ABSENCE_INTERVAL_SECONDS>",
"KWORK_STATE_RETENTION_DAYS": "<YOUR_KWORK_STATE_RETENTION_DAYS>",
"KWORK_LOG_LEVEL": "<YOUR_KWORK_LOG_LEVEL>"
}
}
}
}Claude Desktop
{
"mcpServers": {
"kwork-mcp": {
"command": "uvx",
"args": [
"kwork-mcp==1.5.2"
],
"env": {
"KWORK_EXPECTED_USER_ID": "<YOUR_KWORK_EXPECTED_USER_ID>",
"KWORK_EXPECTED_USERNAME": "<YOUR_KWORK_EXPECTED_USERNAME>",
"KWORK_WRITES": "<YOUR_KWORK_WRITES>",
"KWORK_SITE": "<YOUR_KWORK_SITE>",
"KWORK_TIMEOUT": "<YOUR_KWORK_TIMEOUT>",
"KWORK_STATE_DIR": "<YOUR_KWORK_STATE_DIR>",
"KWORK_PERSIST_TOKEN": "<YOUR_KWORK_PERSIST_TOKEN>",
"KWORK_RPS_LIMIT": "<YOUR_KWORK_RPS_LIMIT>",
"KWORK_BURST_LIMIT": "<YOUR_KWORK_BURST_LIMIT>",
"KWORK_ROUTE_RPS_LIMIT": "<YOUR_KWORK_ROUTE_RPS_LIMIT>",
"KWORK_ROUTE_BURST_LIMIT": "<YOUR_KWORK_ROUTE_BURST_LIMIT>",
"KWORK_RATE_WAIT_TIMEOUT": "<YOUR_KWORK_RATE_WAIT_TIMEOUT>",
"KWORK_AUTH_LOCK_TIMEOUT": "<YOUR_KWORK_AUTH_LOCK_TIMEOUT>",
"KWORK_READ_ATTEMPTS": "<YOUR_KWORK_READ_ATTEMPTS>",
"KWORK_RETRY_BACKOFF_BASE": "<YOUR_KWORK_RETRY_BACKOFF_BASE>",
"KWORK_RETRY_BACKOFF_MAX": "<YOUR_KWORK_RETRY_BACKOFF_MAX>",
"KWORK_CIRCUIT_FAILURE_THRESHOLD": "<YOUR_KWORK_CIRCUIT_FAILURE_THRESHOLD>",
"KWORK_CIRCUIT_OPEN_SECONDS": "<YOUR_KWORK_CIRCUIT_OPEN_SECONDS>",
"KWORK_PREPARATION_TTL_SECONDS": "<YOUR_KWORK_PREPARATION_TTL_SECONDS>",
"KWORK_WRITE_LEASE_SECONDS": "<YOUR_KWORK_WRITE_LEASE_SECONDS>",
"KWORK_RECONCILIATION_MIN_AGE_SECONDS": "<YOUR_KWORK_RECONCILIATION_MIN_AGE_SECONDS>",
"KWORK_RECONCILIATION_ABSENCE_CONFIRMATIONS": "<YOUR_KWORK_RECONCILIATION_ABSENCE_CONFIRMATIONS>",
"KWORK_RECONCILIATION_ABSENCE_INTERVAL_SECONDS": "<YOUR_KWORK_RECONCILIATION_ABSENCE_INTERVAL_SECONDS>",
"KWORK_STATE_RETENTION_DAYS": "<YOUR_KWORK_STATE_RETENTION_DAYS>",
"KWORK_LOG_LEVEL": "<YOUR_KWORK_LOG_LEVEL>"
}
}
}
}Let your agent find its tools
Find servers like Kwork MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.