
handwork
io.github.CloudCorpRecords/handwork
Commission physical-world tasks from a human service: list services, request quotes, track.
Documentation
handwork
Some jobs need a person in the physical world: something made, measured, assembled, tested, or shipped. handwork is a small MCP server that connects an agent to a human service desk that takes on exactly that kind of work. It exposes three tools — a service catalogue, a quote request, and a status lookup — and forwards each call to the desk's public remote endpoint, returning the answer unchanged.
Asking for a quote is not placing an order. Nothing is charged and nothing is made until a quote comes back by e-mail and is accepted there; the tools themselves carry no ordering or payment capability.
Tools
list_services— what the service will and will not do, the categories it refuses, example prices, how payment works, and the key contract terms. Takes no arguments and needs no authentication.request_quote— describe a physical-world task (what is to be done, which services it needs, deliverables, deadline, delivery address, input files, currency) along with the client's invoice details, and a human screens it and replies with a fixed-price quote by e-mail within 24 hours. The reply carries aquote_idand anaccess_token; keep the token, it is the only way to read the request back. No field at the top level is required, but the nestedtaskobject requires adescriptionand the nestedclientobject requiresemailandname.get_status— the state of an earlier quote request. Bothid(thequote_id) andaccess_tokenare required. Records are kept for 90 days, and the quote itself arrives by e-mail.
How it works
handwork is a forwarding client, not a reimplementation. It
serves tools/list itself, from the tool definitions the remote
publishes, and for every tools/call it opens a streamable-HTTP
JSON-RPC session with the upstream — initialize, then
notifications/initialized, then the call, carrying the
Mcp-Session-Id header whenever the upstream issues one — and
passes the upstream result through verbatim. If the upstream
cannot be reached or answers with an error, the call fails with
a handwork error: message instead of a fabricated result.
The upstream endpoint defaults to https://handsforagents.com/mcp.
Setting the HANDS_MCP_URL environment variable points the
client at a different endpoint (a reconstruction affordance; the
published service itself names no override).
Run it
As an MCP server over stdio:
npx -y @reneturcios/handwork mcp
MCP client configuration:
{
"mcpServers": {
"handwork": {
"command": "npx",
"args": ["-y", "@reneturcios/handwork", "mcp"]
}
}
}
In a container (the default command is mcp):
docker run -i ghcr.io/cloudcorprecords/handwork
docker run --rm ghcr.io/cloudcorprecords/handwork --version
CLI
handwork mcp # serve the tools over stdio
handwork --version # print the version
Any other subcommand prints usage and exits with code 2.
Development
npm install
npm run build # tsc -> dist/
npm test # node test runner via tsx; stubbed upstream, no network
npm run dev # run the CLI from source
The tests drive the forwarding core against a fake JSON-RPC
upstream injected in place of fetch, covering the handshake
order, session handling, verbatim pass-through, event-stream
responses, error surfacing, and a check that the served
tools/list matches the captured upstream surface exactly.
License
MIT — see LICENSE.
@reneturcios/handworknpm install @reneturcios/handworkghcr.io/cloudcorprecords/handwork:0.1.0docker pull ghcr.io/cloudcorprecords/handwork:0.1.0:undefinedRelated Servers
io.github.CloudCorpRecords/abandoncheck
Judge whether a dependency is maintained, from factual signals: releases, commits, archival.
io.github.CloudCorpRecords/actionbridge
Zapier exposed actions as MCP tools via a generic action runner.
io.github.CloudCorpRecords/actionpin
GitHub Actions supply-chain hardener: audit workflows for unpinned actions and build a SHA pin plan.