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.
- Discover — read the A2A agent card, the OpenAPI document, or the MCP tool list. Each names the capabilities, their inputs, and their deliverables.
- Preflight —
POST /v1/jobsvalidates the request and returns a quote: price, expiry, and exact scope. An unsupported request is refused here, not sold and then failed. - Authorize —
POST /v1/jobs/{id}/authorizewith the quote id, the accepted amount, and who authorized it. Send anIdempotency-Keyso a retry returns the existing job, never a duplicate. - 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.
- 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.
- Collect —
GET /v1/jobs/{id}returns the artifacts, the verification result, the history, and the reported cost. Authorization returns anaccess_token; send it asX-Job-Tokento 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.
| Capability | What it produces | Inputs | Status |
|---|---|---|---|
| boundary-value-generation | Produce a standard-library Python module that produces boundary values for an integer range, plus pytest tests. | module_name, function_name, template | available |
| csv-json-transformation | Produce 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, template | available |
| data-validation-module | Produce 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, template | available |
| dataset-quality-report | Produce a standard-library Python module that computes a quality report for an array of records, plus pytest tests. | module_name, function_name, template | available |
| duplicate-group-report | Produce a standard-library Python module that groups records sharing a key field, plus pytest tests. | module_name, function_name, template | available |
| edge-case-check | Produce a standard-library Python module that reports boundary conditions for a text value, plus pytest tests. | module_name, function_name, template | available |
| field-mapping | Produce a standard-library Python module that renames and selects JSON fields using a mapping, plus pytest tests. | module_name, function_name, template | available |
| json-csv-conversion | Produce a standard-library Python module that renders a JSON array of objects as CSV text, plus pytest tests. | module_name, function_name, template | available |
| json-schema-inference | Produce a standard-library Python module that infers a JSON Schema from sample records, plus pytest tests. | module_name, function_name, template | available |
| key-normalisation | Produce a standard-library Python module that rewrites JSON object keys to lower snake_case, plus pytest tests. | module_name, function_name, template | available |
| malformed-record-detection | Produce a standard-library Python module that reports records violating a fixed field contract, plus pytest tests. | module_name, function_name, template | available |
| markdown-table-rendering | Produce a standard-library Python module that renders JSON records as a Markdown table, plus pytest tests. | module_name, function_name, template | available |
| metadata-extraction | Produce a standard-library Python module that extracts key/value metadata from a document head, plus pytest tests. | module_name, function_name, template | available |
| nested-flattening | Produce a standard-library Python module that flattens a nested object into dotted-path keys, plus pytest tests. | module_name, function_name, template | available |
| python-multifile-package | Produce 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, template | available |
| python-utility-module | Produce a small standard-library Python module from a registered, deterministic template, plus the pytest tests that verify it. | module_name, function_name, template | available |
| readme-generation | Produce a standard-library Python module that generates a Markdown README from function signatures, plus pytest tests. | module_name, function_name, template | available |
| record-deduplication | Produce a standard-library Python module that removes duplicate objects from a JSON array, plus pytest tests. | module_name, function_name, template | available |
| regex-from-examples | Produce a standard-library Python module that builds a regular expression from positive and negative examples, plus pytest tests. | module_name, function_name, template | available |
| regression-suite-generation | Produce a standard-library Python module that turns recorded input/output pairs into a pytest module, plus pytest tests. | module_name, function_name, template | available |
| text-parser-module | Produce 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, template | available |
| webhook-payload-validation | Produce a standard-library Python module that validates a webhook payload envelope, plus pytest tests. | module_name, function_name, template | available |
| xml-json-conversion | Produce a standard-library Python module that converts an XML document into JSON, plus pytest tests. | module_name, function_name, template | available |
- 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. This deployment accepts x402 USDC to a receive-only address (0xb08aD8511044e299f7D50E140cEe82D2867b5977 on eip155:8453) and settlement is confirmed on chain. There is still no invoice, refund, or dispute process.
- 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.