Account-bound, typed and durable stdio MCP gateway for the Kwork freelance marketplace
Connect Runs on your machine
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
{
"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>"
}
}
}
}
{
"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>"
}
}
}
}
{
"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
| Name | Description |
|---|---|
KWORK_EXPECTED_USER_IDOptional | Kwork user ID to serve; optional when kwork-mcp login bound a single account, required when several are bound |
KWORK_EXPECTED_USERNAMEOptional | Optional second account identity check |
KWORK_WRITESOptional | Sending to Kwork: confirm asks the user before each send (client dialog or chat), auto lets the agent send, off is read-only |
KWORK_SITEOptional | Kwork site: ru (kwork.ru) or com (kwork.com); kwork.com has no project exchange |
KWORK_TIMEOUTOptional | Kwork request timeout in seconds (1-120) |
KWORK_STATE_DIROptional | Absolute private directory shared by gateway processes for the same account |
KWORK_PERSIST_TOKENOptional | Use the verified account-scoped credential store; required for normal server startup |
KWORK_RPS_LIMITOptional | Shared account-level token refill rate |
KWORK_BURST_LIMITOptional | Shared account-level token bucket capacity |
KWORK_ROUTE_RPS_LIMITOptional | Shared per-route token refill rate |
KWORK_ROUTE_BURST_LIMITOptional | Shared per-route token bucket capacity |
KWORK_RATE_WAIT_TIMEOUTOptional | Maximum seconds to wait for shared rate-limit admission |
KWORK_AUTH_LOCK_TIMEOUTOptional | Maximum seconds to wait for account credential-store authentication coordination |
KWORK_READ_ATTEMPTSOptional | Maximum attempts for retry-safe read requests only |
KWORK_RETRY_BACKOFF_BASEOptional | Initial retry backoff for retry-safe reads, in seconds |
KWORK_RETRY_BACKOFF_MAXOptional | Maximum retry backoff for retry-safe reads, in seconds |
KWORK_CIRCUIT_FAILURE_THRESHOLDOptional | Shared route failures before opening the circuit |
KWORK_CIRCUIT_OPEN_SECONDSOptional | Base shared circuit-open interval in seconds |
KWORK_PREPARATION_TTL_SECONDSOptional | Safe write preparation lifetime |
KWORK_WRITE_LEASE_SECONDSOptional | Durable one-writer lease duration in seconds |
KWORK_RECONCILIATION_MIN_AGE_SECONDSOptional | Minimum age before ambiguous-write read-back (1-300 seconds) |
KWORK_RECONCILIATION_ABSENCE_CONFIRMATIONSOptional | Complete absent observations required before a terminal result |
KWORK_RECONCILIATION_ABSENCE_INTERVAL_SECONDSOptional | Minimum interval between absent observations (1-300 seconds) |
KWORK_STATE_RETENTION_DAYSOptional | Retention for terminal durable write records |
KWORK_LOG_LEVELOptional | Gateway stderr log level: DEBUG, INFO, WARNING or ERROR |
Details
| Package | [email protected] (PYPI, stdio) |
| First published | 3 Oct 2026 |
| Last updated | 3 Oct 2026 |
| Registry name | io.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.
