Back to Browse

Handwork MCP Server

Developer ToolsModerate5.1MCP RegistryLocal
Free

Server data from the Official MCP Registry

Commission physical-world tasks from a human service: list services, request quotes, track.

About

Commission physical-world tasks from a human service: list services, request quotes, track.

Security Report

5.1
Moderate5.1Moderate Risk

handwork is a small forwarding client that exposes three tools and sends each call to a pinned public remote (handsforagents.com) without authentication, passing results back verbatim. Its main concerns are that quote requests transmit the client's name, email, delivery address and VAT id to a third party by design, and that the HANDS_MCP_URL environment variable can redirect all traffic to any endpoint, including plain HTTP, without validation. Neither is a malicious pattern, and the permissions match the stated purpose. Supply chain analysis found 3 known vulnerabilities in dependencies (0 critical, 2 high severity). Package verification found 1 issue.

8 files analyzed · 9 issues found

Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.

Permissions Required

This plugin requests these system permissions. Most are normal for its category.

HTTP Network Access

Connects to external APIs or services over the internet.

env_vars

Check that this permission is expected for this type of plugin.

How to Install

Add this to your MCP configuration file:

{
  "mcpServers": {
    "io-github-cloudcorprecords-handwork": {
      "args": [
        "-y",
        "@reneturcios/handwork"
      ],
      "command": "npx"
    }
  }
}

Documentation

View on GitHub

From the project's GitHub README.

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 a quote_id and an access_token; keep the token, it is the only way to read the request back. No field at the top level is required, but the nested task object requires a description and the nested client object requires email and name.
  • get_status — the state of an earlier quote request. Both id (the quote_id) and access_token are 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.

Reviews

No reviews yet

Be the first to review this server!