NestDaddy

Kwork

io.github.simonether/kwork-mcp · v1.5.2

Account-bound, typed and durable stdio MCP gateway for the Kwork freelance marketplace

Connect Runs on your machine

Terminal
claude mcp add kwork-mcp -e KWORK_EXPECTED_USER_ID=<KWORK_EXPECTED_USER_ID> -e KWORK_EXPECTED_USERNAME=<KWORK_EXPECTED_USERNAME> -e KWORK_WRITES=<KWORK_WRITES> -e KWORK_SITE=<KWORK_SITE> -e KWORK_TIMEOUT=<KWORK_TIMEOUT> -e KWORK_STATE_DIR=<KWORK_STATE_DIR> -e KWORK_PERSIST_TOKEN=<KWORK_PERSIST_TOKEN> -e KWORK_RPS_LIMIT=<KWORK_RPS_LIMIT> -e KWORK_BURST_LIMIT=<KWORK_BURST_LIMIT> -e KWORK_ROUTE_RPS_LIMIT=<KWORK_ROUTE_RPS_LIMIT> -e KWORK_ROUTE_BURST_LIMIT=<KWORK_ROUTE_BURST_LIMIT> -e KWORK_RATE_WAIT_TIMEOUT=<KWORK_RATE_WAIT_TIMEOUT> -e KWORK_AUTH_LOCK_TIMEOUT=<KWORK_AUTH_LOCK_TIMEOUT> -e KWORK_READ_ATTEMPTS=<KWORK_READ_ATTEMPTS> -e KWORK_RETRY_BACKOFF_BASE=<KWORK_RETRY_BACKOFF_BASE> -e KWORK_RETRY_BACKOFF_MAX=<KWORK_RETRY_BACKOFF_MAX> -e KWORK_CIRCUIT_FAILURE_THRESHOLD=<KWORK_CIRCUIT_FAILURE_THRESHOLD> -e KWORK_CIRCUIT_OPEN_SECONDS=<KWORK_CIRCUIT_OPEN_SECONDS> -e KWORK_PREPARATION_TTL_SECONDS=<KWORK_PREPARATION_TTL_SECONDS> -e KWORK_WRITE_LEASE_SECONDS=<KWORK_WRITE_LEASE_SECONDS> -e KWORK_RECONCILIATION_MIN_AGE_SECONDS=<KWORK_RECONCILIATION_MIN_AGE_SECONDS> -e KWORK_RECONCILIATION_ABSENCE_CONFIRMATIONS=<KWORK_RECONCILIATION_ABSENCE_CONFIRMATIONS> -e KWORK_RECONCILIATION_ABSENCE_INTERVAL_SECONDS=<KWORK_RECONCILIATION_ABSENCE_INTERVAL_SECONDS> -e KWORK_STATE_RETENTION_DAYS=<KWORK_STATE_RETENTION_DAYS> -e KWORK_LOG_LEVEL=<KWORK_LOG_LEVEL> -- uvx kwork-mcp==1.5.2
claude_desktop_config.json
{
  "mcpServers": {
    "kwork-mcp": {
      "command": "uvx",
      "args": [
        "kwork-mcp==1.5.2"
      ],
      "env": {
        "KWORK_EXPECTED_USER_ID": "<KWORK_EXPECTED_USER_ID>",
        "KWORK_EXPECTED_USERNAME": "<KWORK_EXPECTED_USERNAME>",
        "KWORK_WRITES": "<KWORK_WRITES>",
        "KWORK_SITE": "<KWORK_SITE>",
        "KWORK_TIMEOUT": "<KWORK_TIMEOUT>",
        "KWORK_STATE_DIR": "<KWORK_STATE_DIR>",
        "KWORK_PERSIST_TOKEN": "<KWORK_PERSIST_TOKEN>",
        "KWORK_RPS_LIMIT": "<KWORK_RPS_LIMIT>",
        "KWORK_BURST_LIMIT": "<KWORK_BURST_LIMIT>",
        "KWORK_ROUTE_RPS_LIMIT": "<KWORK_ROUTE_RPS_LIMIT>",
        "KWORK_ROUTE_BURST_LIMIT": "<KWORK_ROUTE_BURST_LIMIT>",
        "KWORK_RATE_WAIT_TIMEOUT": "<KWORK_RATE_WAIT_TIMEOUT>",
        "KWORK_AUTH_LOCK_TIMEOUT": "<KWORK_AUTH_LOCK_TIMEOUT>",
        "KWORK_READ_ATTEMPTS": "<KWORK_READ_ATTEMPTS>",
        "KWORK_RETRY_BACKOFF_BASE": "<KWORK_RETRY_BACKOFF_BASE>",
        "KWORK_RETRY_BACKOFF_MAX": "<KWORK_RETRY_BACKOFF_MAX>",
        "KWORK_CIRCUIT_FAILURE_THRESHOLD": "<KWORK_CIRCUIT_FAILURE_THRESHOLD>",
        "KWORK_CIRCUIT_OPEN_SECONDS": "<KWORK_CIRCUIT_OPEN_SECONDS>",
        "KWORK_PREPARATION_TTL_SECONDS": "<KWORK_PREPARATION_TTL_SECONDS>",
        "KWORK_WRITE_LEASE_SECONDS": "<KWORK_WRITE_LEASE_SECONDS>",
        "KWORK_RECONCILIATION_MIN_AGE_SECONDS": "<KWORK_RECONCILIATION_MIN_AGE_SECONDS>",
        "KWORK_RECONCILIATION_ABSENCE_CONFIRMATIONS": "<KWORK_RECONCILIATION_ABSENCE_CONFIRMATIONS>",
        "KWORK_RECONCILIATION_ABSENCE_INTERVAL_SECONDS": "<KWORK_RECONCILIATION_ABSENCE_INTERVAL_SECONDS>",
        "KWORK_STATE_RETENTION_DAYS": "<KWORK_STATE_RETENTION_DAYS>",
        "KWORK_LOG_LEVEL": "<KWORK_LOG_LEVEL>"
      }
    }
  }
}
~/.cursor/mcp.json
{
  "mcpServers": {
    "kwork-mcp": {
      "command": "uvx",
      "args": [
        "kwork-mcp==1.5.2"
      ],
      "env": {
        "KWORK_EXPECTED_USER_ID": "<KWORK_EXPECTED_USER_ID>",
        "KWORK_EXPECTED_USERNAME": "<KWORK_EXPECTED_USERNAME>",
        "KWORK_WRITES": "<KWORK_WRITES>",
        "KWORK_SITE": "<KWORK_SITE>",
        "KWORK_TIMEOUT": "<KWORK_TIMEOUT>",
        "KWORK_STATE_DIR": "<KWORK_STATE_DIR>",
        "KWORK_PERSIST_TOKEN": "<KWORK_PERSIST_TOKEN>",
        "KWORK_RPS_LIMIT": "<KWORK_RPS_LIMIT>",
        "KWORK_BURST_LIMIT": "<KWORK_BURST_LIMIT>",
        "KWORK_ROUTE_RPS_LIMIT": "<KWORK_ROUTE_RPS_LIMIT>",
        "KWORK_ROUTE_BURST_LIMIT": "<KWORK_ROUTE_BURST_LIMIT>",
        "KWORK_RATE_WAIT_TIMEOUT": "<KWORK_RATE_WAIT_TIMEOUT>",
        "KWORK_AUTH_LOCK_TIMEOUT": "<KWORK_AUTH_LOCK_TIMEOUT>",
        "KWORK_READ_ATTEMPTS": "<KWORK_READ_ATTEMPTS>",
        "KWORK_RETRY_BACKOFF_BASE": "<KWORK_RETRY_BACKOFF_BASE>",
        "KWORK_RETRY_BACKOFF_MAX": "<KWORK_RETRY_BACKOFF_MAX>",
        "KWORK_CIRCUIT_FAILURE_THRESHOLD": "<KWORK_CIRCUIT_FAILURE_THRESHOLD>",
        "KWORK_CIRCUIT_OPEN_SECONDS": "<KWORK_CIRCUIT_OPEN_SECONDS>",
        "KWORK_PREPARATION_TTL_SECONDS": "<KWORK_PREPARATION_TTL_SECONDS>",
        "KWORK_WRITE_LEASE_SECONDS": "<KWORK_WRITE_LEASE_SECONDS>",
        "KWORK_RECONCILIATION_MIN_AGE_SECONDS": "<KWORK_RECONCILIATION_MIN_AGE_SECONDS>",
        "KWORK_RECONCILIATION_ABSENCE_CONFIRMATIONS": "<KWORK_RECONCILIATION_ABSENCE_CONFIRMATIONS>",
        "KWORK_RECONCILIATION_ABSENCE_INTERVAL_SECONDS": "<KWORK_RECONCILIATION_ABSENCE_INTERVAL_SECONDS>",
        "KWORK_STATE_RETENTION_DAYS": "<KWORK_STATE_RETENTION_DAYS>",
        "KWORK_LOG_LEVEL": "<KWORK_LOG_LEVEL>"
      }
    }
  }
}
.vscode/mcp.json
{
  "servers": {
    "kwork-mcp": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "kwork-mcp==1.5.2"
      ],
      "env": {
        "KWORK_EXPECTED_USER_ID": "<KWORK_EXPECTED_USER_ID>",
        "KWORK_EXPECTED_USERNAME": "<KWORK_EXPECTED_USERNAME>",
        "KWORK_WRITES": "<KWORK_WRITES>",
        "KWORK_SITE": "<KWORK_SITE>",
        "KWORK_TIMEOUT": "<KWORK_TIMEOUT>",
        "KWORK_STATE_DIR": "<KWORK_STATE_DIR>",
        "KWORK_PERSIST_TOKEN": "<KWORK_PERSIST_TOKEN>",
        "KWORK_RPS_LIMIT": "<KWORK_RPS_LIMIT>",
        "KWORK_BURST_LIMIT": "<KWORK_BURST_LIMIT>",
        "KWORK_ROUTE_RPS_LIMIT": "<KWORK_ROUTE_RPS_LIMIT>",
        "KWORK_ROUTE_BURST_LIMIT": "<KWORK_ROUTE_BURST_LIMIT>",
        "KWORK_RATE_WAIT_TIMEOUT": "<KWORK_RATE_WAIT_TIMEOUT>",
        "KWORK_AUTH_LOCK_TIMEOUT": "<KWORK_AUTH_LOCK_TIMEOUT>",
        "KWORK_READ_ATTEMPTS": "<KWORK_READ_ATTEMPTS>",
        "KWORK_RETRY_BACKOFF_BASE": "<KWORK_RETRY_BACKOFF_BASE>",
        "KWORK_RETRY_BACKOFF_MAX": "<KWORK_RETRY_BACKOFF_MAX>",
        "KWORK_CIRCUIT_FAILURE_THRESHOLD": "<KWORK_CIRCUIT_FAILURE_THRESHOLD>",
        "KWORK_CIRCUIT_OPEN_SECONDS": "<KWORK_CIRCUIT_OPEN_SECONDS>",
        "KWORK_PREPARATION_TTL_SECONDS": "<KWORK_PREPARATION_TTL_SECONDS>",
        "KWORK_WRITE_LEASE_SECONDS": "<KWORK_WRITE_LEASE_SECONDS>",
        "KWORK_RECONCILIATION_MIN_AGE_SECONDS": "<KWORK_RECONCILIATION_MIN_AGE_SECONDS>",
        "KWORK_RECONCILIATION_ABSENCE_CONFIRMATIONS": "<KWORK_RECONCILIATION_ABSENCE_CONFIRMATIONS>",
        "KWORK_RECONCILIATION_ABSENCE_INTERVAL_SECONDS": "<KWORK_RECONCILIATION_ABSENCE_INTERVAL_SECONDS>",
        "KWORK_STATE_RETENTION_DAYS": "<KWORK_STATE_RETENTION_DAYS>",
        "KWORK_LOG_LEVEL": "<KWORK_LOG_LEVEL>"
      }
    }
  }
}

Replace the values in angle brackets with your own. Keys stay on your machine; we never see them.

Tools

This server runs locally, so its tools are listed by your MCP client once it starts.

Environment variables

NameDescription
KWORK_EXPECTED_USER_ID
Optional
Kwork user ID to serve; optional when kwork-mcp login bound a single account, required when several are bound
KWORK_EXPECTED_USERNAME
Optional
Optional second account identity check
KWORK_WRITES
Optional
Sending to Kwork: confirm asks the user before each send (client dialog or chat), auto lets the agent send, off is read-only
KWORK_SITE
Optional
Kwork site: ru (kwork.ru) or com (kwork.com); kwork.com has no project exchange
KWORK_TIMEOUT
Optional
Kwork request timeout in seconds (1-120)
KWORK_STATE_DIR
Optional
Absolute private directory shared by gateway processes for the same account
KWORK_PERSIST_TOKEN
Optional
Use the verified account-scoped credential store; required for normal server startup
KWORK_RPS_LIMIT
Optional
Shared account-level token refill rate
KWORK_BURST_LIMIT
Optional
Shared account-level token bucket capacity
KWORK_ROUTE_RPS_LIMIT
Optional
Shared per-route token refill rate
KWORK_ROUTE_BURST_LIMIT
Optional
Shared per-route token bucket capacity
KWORK_RATE_WAIT_TIMEOUT
Optional
Maximum seconds to wait for shared rate-limit admission
KWORK_AUTH_LOCK_TIMEOUT
Optional
Maximum seconds to wait for account credential-store authentication coordination
KWORK_READ_ATTEMPTS
Optional
Maximum attempts for retry-safe read requests only
KWORK_RETRY_BACKOFF_BASE
Optional
Initial retry backoff for retry-safe reads, in seconds
KWORK_RETRY_BACKOFF_MAX
Optional
Maximum retry backoff for retry-safe reads, in seconds
KWORK_CIRCUIT_FAILURE_THRESHOLD
Optional
Shared route failures before opening the circuit
KWORK_CIRCUIT_OPEN_SECONDS
Optional
Base shared circuit-open interval in seconds
KWORK_PREPARATION_TTL_SECONDS
Optional
Safe write preparation lifetime
KWORK_WRITE_LEASE_SECONDS
Optional
Durable one-writer lease duration in seconds
KWORK_RECONCILIATION_MIN_AGE_SECONDS
Optional
Minimum age before ambiguous-write read-back (1-300 seconds)
KWORK_RECONCILIATION_ABSENCE_CONFIRMATIONS
Optional
Complete absent observations required before a terminal result
KWORK_RECONCILIATION_ABSENCE_INTERVAL_SECONDS
Optional
Minimum interval between absent observations (1-300 seconds)
KWORK_STATE_RETENTION_DAYS
Optional
Retention for terminal durable write records
KWORK_LOG_LEVEL
Optional
Gateway stderr log level: DEBUG, INFO, WARNING or ERROR

Details

Package[email protected] (PYPI, stdio)
First published3 Oct 2026
Last updated3 Oct 2026
Registry nameio.github.simonether/kwork-mcp

More other servers See all

Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.