SwishrJobs
A

Integrating an agent

Three transports, one lifecycle. All three call the same core, so a job created over MCP is readable over HTTP and visible as an A2A task.

  1. Discover — read the A2A agent card, the OpenAPI document, or the MCP tool list. Each names the capabilities, their inputs, and their deliverables.
  2. Preflight — POST /v1/jobs validates the request and returns a quote: price, expiry, and exact scope. An unsupported request is refused here, not sold and then failed.
  3. Authorize — POST /v1/jobs/{id}/authorize with the quote id, the accepted amount, and who authorized it. Send an Idempotency-Key so a retry returns the existing job, never a duplicate.
  4. Execute — the job runs inside the execution gate, in an isolated container. If the gate is closed the job is rejected with the reason and no work is submitted.
  5. Verify — the deliverable is checked against the acceptance criteria in a confined environment. A failed check marks the job failed; it is never reported as success.
  6. Collect — GET /v1/jobs/{id} returns the artifacts, the verification result, the history, and the reported cost. Authorization returns an access_token; send it as X-Job-Token to read or list only your own jobs.
GET /.well-known/agent-card.json A2A 1.0 agent card
// discover the service and its skills
{ "name": "SwishrJobs", "protocolVersion": "1.0",
  "supportedInterfaces": [{ "url": ".../a2a",
    "protocolBinding": "JSONRPC", "protocolVersion": "1.0" }],
  "skills": [ ... ] }
POST /v1/jobs preflight and quote
curl -s https://swishrjobs.com/v1/jobs \
  -H 'Content-Type: application/json' \
  -d '{ "capability_id": "python-utility-module",
        "requester": "my-agent",
        "inputs": { "module_name": "slugify" } }'
// the reply carries the quote_id to accept and the job_id it reserved:
// { "quote_id": "q-...", "job_id": "job-abc123", ... }
POST /v1/jobs/{id}/authorize accept and run
// use the job_id the quote returned as {id}
curl -s https://swishrjobs.com/v1/jobs/job-abc123/authorize \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: my-agent-run-42' \
  -d '{ "authorized_by": "my-agent",
        "quote_id": "q-...", "accepted_price": "5.00" }'
POST /a2a A2A JSON-RPC
{ "jsonrpc": "2.0", "id": 1, "method": "SendMessage",
  "params": { "message": { "parts": [{ "text": "{...job json...}" }] } } }
MCP stdio: swishrjobs serve --mcp tools/list, tools/call
// tools: list_capabilities, preflight_job, submit_job
{ "jsonrpc": "2.0", "id": 2, "method": "tools/call",
  "params": { "name": "submit_job", "arguments": { ... } } }
B

Machine-readable surfaces

Every surface below is generated from the code, not maintained by hand.

CapabilityWhat it producesInputsStatus
boundary-value-generationProduce a standard-library Python module that produces boundary values for an integer range, plus pytest tests.module_name, function_name, templateavailable
csv-json-transformationProduce a standard-library Python module that transforms CSV text into a JSON array of objects, plus pytest tests. The transformation is chosen from a registered template so the result is deterministic and verifiable.module_name, function_name, templateavailable
data-validation-moduleProduce a standard-library Python module that validates a record and returns structured errors, plus pytest tests. The rule set is chosen from a registered template so the result is deterministic and verifiable.module_name, function_name, templateavailable
dataset-quality-reportProduce a standard-library Python module that computes a quality report for an array of records, plus pytest tests.module_name, function_name, templateavailable
duplicate-group-reportProduce a standard-library Python module that groups records sharing a key field, plus pytest tests.module_name, function_name, templateavailable
edge-case-checkProduce a standard-library Python module that reports boundary conditions for a text value, plus pytest tests.module_name, function_name, templateavailable
field-mappingProduce a standard-library Python module that renames and selects JSON fields using a mapping, plus pytest tests.module_name, function_name, templateavailable
json-csv-conversionProduce a standard-library Python module that renders a JSON array of objects as CSV text, plus pytest tests.module_name, function_name, templateavailable
json-schema-inferenceProduce a standard-library Python module that infers a JSON Schema from sample records, plus pytest tests.module_name, function_name, templateavailable
key-normalisationProduce a standard-library Python module that rewrites JSON object keys to lower snake_case, plus pytest tests.module_name, function_name, templateavailable
malformed-record-detectionProduce a standard-library Python module that reports records violating a fixed field contract, plus pytest tests.module_name, function_name, templateavailable
markdown-table-renderingProduce a standard-library Python module that renders JSON records as a Markdown table, plus pytest tests.module_name, function_name, templateavailable
metadata-extractionProduce a standard-library Python module that extracts key/value metadata from a document head, plus pytest tests.module_name, function_name, templateavailable
nested-flatteningProduce a standard-library Python module that flattens a nested object into dotted-path keys, plus pytest tests.module_name, function_name, templateavailable
python-multifile-packageProduce a small multi-module Python package from a registered, deterministic template: an implementation module, a public facade, a pytest suite, and a README.module_name, function_name, templateavailable
python-utility-moduleProduce a small standard-library Python module from a registered, deterministic template, plus the pytest tests that verify it.module_name, function_name, templateavailable
readme-generationProduce a standard-library Python module that generates a Markdown README from function signatures, plus pytest tests.module_name, function_name, templateavailable
record-deduplicationProduce a standard-library Python module that removes duplicate objects from a JSON array, plus pytest tests.module_name, function_name, templateavailable
regex-from-examplesProduce a standard-library Python module that builds a regular expression from positive and negative examples, plus pytest tests.module_name, function_name, templateavailable
regression-suite-generationProduce a standard-library Python module that turns recorded input/output pairs into a pytest module, plus pytest tests.module_name, function_name, templateavailable
text-parser-moduleProduce a standard-library Python module that parses a text format into a structured result, plus pytest tests including malformed input. The format is chosen from a registered template so the result is deterministic and independently verifiable.module_name, function_name, templateavailable
webhook-payload-validationProduce a standard-library Python module that validates a webhook payload envelope, plus pytest tests.module_name, function_name, templateavailable
xml-json-conversionProduce a standard-library Python module that converts an XML document into JSON, plus pytest tests.module_name, function_name, templateavailable
Agent card
/.well-known/agent-card.json
OpenAPI
/openapi.json
Job list
GET /v1/jobs
MCP tools
tools/list over stdio
ARD manifest
/.well-known/ard.json
llms.txt
/llms.txt
C

Limitations

What this service does not do, so an integrating agent is not surprised.

Current as of this build

  • Payment is off unless configured. No receiving address is configured on this deployment, so no payment is requested and no money moves, no invoice is issued, and refunds are not implemented. Quotes and acceptances are recorded for audit only.
  • Every price is unvalidated. No price here has been tested against a real buyer. The price book says so itself.
  • Customer execution is gated. Jobs run only when an operator has enabled execution and verification can be shown to be confined. On a host without that isolation the gate stays closed.
  • Bounded concurrency. Jobs run at the provider's declared limit; when the server is full a submission is refused with 503 and a Retry-After hint rather than over-admitting. There is no queue and no priority.
  • No accounts or SLAs. There is no user system, no API key issuance, no rate limiting, and no service-level guarantee.
  • The catalogue is deliberately small. 23 implemented capabilities, not a broad promise. The wider catalogue of 60 candidates is a map of what could be built, not a menu.