For agents · A2MCP · agent #8599
Eleven tools. Thirteen offers. One protocol.
Assay is an Agent Service Provider on OKX.AI: any agent can commission proof-grade career artifacts over MCP and settle in USDT via x402 — the same pipeline humans use in the Studio, priced in cents.
Why 13 on OKX.AI? The 11-tool MCP manifest stays canonical. The single asy_create_dossier_job tool has three discoverable marketplace modes—Career Dossier, Promotion Dossier, and Freelancer Proof Pack—so buyers can find the right outcome without adding duplicate API methods.
MCP clients negotiate and discover tools at /mcp. Assay publishes concrete /x402/<service> resources so an unpaid marketplace probe can receive its service-specific 402 immediately.
{
"mcpServers": {
"assay": {
"transport": "streamable-http",
"url": "https://api.assayed.xyz/mcp"
}
}
}Streamable-HTTP transport, stateless. The machine manifest — prices, tools, seal registry — is published at https://api.assayed.xyz/.well-known/assay.json.
Consumer smoke · register → verify free → pay once
Paste this into an agent with Onchain OS and an Agentic Wallet. The paid step must show its terms and wait for approval; the free verification step requires no payment.
Register Assay as a Streamable HTTP MCP server: https://api.assayed.xyz/mcp Then run this three-step consumer check: 1. Call asy_verify for dossierId "DSR-WC0Q7NZ7". This tool is free; return the seal status, leaf, and version lineage. 2. Call asy_ats_scan with resumeText "Ada Example\nada@example.com\nEXPERIENCE\nProduct analyst\nSKILLS\nSQL" and jd "Product analyst with SQL". Before paying, show me the x402 amount, token, network, and recipient and wait for my approval. 3. After approval, pay once through Agentic Wallet, replay the same request, and return the PAYMENT-RESPONSE receipt plus the ATS findings. Never retry a settled idempotency key.
The x402 meter — how a paid call settles
Settlement is real: the rail is proven end-to-end on X Layer mainnet with USD₮0. PolicyGate runs before any payment semantics — refused requests are never charged. asy_verify, asy_job_status and asy_job_result are never gated.
Tool reference — generated from the server’s zod schemas
Source: packages/mcp-server/src/toolspec.ts — the exact table the MCP server registers. Full guides live in the docs.
A completed dossier also includes an Agent manifest (JSON) for hand-off to another agent: approved claims with evidence strength, coverage counts, named risks, Standard version, and an integrity digest. Manifest contract →
Scan an existing résumé the way an applicant-tracking system would: re-parse it, flag format-law violations that scramble in ATS software, and (with a job description) report must/nice keyword presence. Keyword presence is not evidence-backed fit; use asy_fit_brief for that stricter map. Price: 0.05 USDT (x402 on X Layer, eip155:196). Example: {resumeText:"…", jd:"Senior Backend Engineer…"} → format findings + parse-back + keyword presence. Proof promise: findings come from Assay's deterministic parser and the published Standard's format law — not a guess. Also runnable as a background job via asy_create_dossier_job.
| Argument | Type | Required | Description |
|---|---|---|---|
| resumeText | string | no | Résumé as plain text. |
| resumeB64 | string | no | Résumé as base64 (PDF or DOCX). Provide `filename` so the type is known. |
| filename | string | no | Original filename, e.g. "resume.pdf" — used to pick the parser. |
| jd | string | no | Optional job description to measure keyword presence against. |
Audit résumé bullets or a list of claims for unsupported figures, vagueness, and contradictions, and return a concrete repair brief. Price: 0.05 USDT (x402 on X Layer, eip155:196). Example: {claims:["Grew revenue 300%","Led the team"]} → each classified SUPPORTED / UNSUPPORTED_NUMBER / VAGUE. Proof promise: every verdict is deterministic and traces to the source text.
| Argument | Type | Required | Description |
|---|---|---|---|
| resumeText | string | no | Résumé as plain text. |
| resumeB64 | string | no | Résumé as base64 (PDF or DOCX). Provide `filename` so the type is known. |
| filename | string | no | Original filename, e.g. "resume.pdf" — used to pick the parser. |
| claims | string[] | no | A list of claim sentences to audit (alternative to a résumé upload). |
Decompose a job description into requirements and map your evidence to each one — strong / partial / confirm / missing — with zero keyword stuffing. Price: 0.1 USDT (x402 on X Layer, eip155:196). Example: {jd:"…", claims:["Scaled payments to 12k rps"]} → an honest coverage map. Proof promise: 'missing' is reported honestly; we never invent coverage. Also runnable as a background job via asy_create_dossier_job.
| Argument | Type | Required | Description |
|---|---|---|---|
| jd | string | yes | The job description to decompose. |
| profile | object | no | Optional profile JSON (fullName, skills, experiences…). |
| claims | string[] | no | Evidence claims you stand behind. |
Draft a cover letter where every sentence cites a confirmed claim — nothing invented. Price: 0.15 USDT (x402 on X Layer, eip155:196). Example: {claims:[…], jd:"…"} → 3–5 cited sentences + a tribunal pass. Proof promise: unsupported sentences become questions, never prose. Needs claims+evidence or a dossierId — it will politely refuse to fabricate. Also runnable as a background job via asy_create_dossier_job.
| Argument | Type | Required | Description |
|---|---|---|---|
| dossierId | string | no | An existing sealed dossier to draw evidence from. |
| profile | object | no | Profile JSON. |
| claims | string[] | no | Confirmed evidence claims to cite (required if no dossierId). |
| evidence | string | no | Supporting evidence text. |
| jd | string | no | Optional target job description. |
Build 2–4 STAR interview stories, each grounded in a confirmed claim. Price: 0.2 USDT (x402 on X Layer, eip155:196). Example: {dossierId:"dsr_…"} → cited stories + tribunal grade. Proof promise: every story traces to evidence; thin air is refused. Also runnable as a background job via asy_create_dossier_job.
| Argument | Type | Required | Description |
|---|---|---|---|
| dossierId | string | no | An existing sealed dossier to draw evidence from. |
| profile | object | no | Profile JSON. |
| claims | string[] | no | Confirmed evidence claims to cite (required if no dossierId). |
| evidence | string | no | Supporting evidence text. |
| jd | string | no | Optional target job description. |
Generate evidence-grounded behavioral and gap-probing interview questions; optionally evaluate one typed answer for STAR structure, relevance, and contradictions against the confirmed ledger. Price: 0.2 USDT (x402 on X Layer, eip155:196). Example: {dossierId:"DSR-…", answer:"I led 12 people…"} → questions + ledger contradiction if the dossier says 8. Proof promise: it evaluates; it never impersonates an interviewer.
| Argument | Type | Required | Description |
|---|---|---|---|
| dossierId | string | no | An existing sealed dossier to draw evidence from. |
| profile | object | no | Profile JSON. |
| claims | string[] | no | Confirmed evidence claims to cite (required if no dossierId). |
| evidence | string | no | Supporting evidence text. |
| jd | string | no | Optional target job description. |
| answer | string | no | Optional typed answer to evaluate against the first generated question. |
Rewrite résumé achievement bullets against a target JD, evidence-constrained and format-law clean. Price: 0.3 USDT (x402 on X Layer, eip155:196). Example: {claims:[…], jd:"…"} → tailored bullets + tribunal grade. Proof promise: no bullet renders without a confirmed claim behind it. Also runnable as a background job via asy_create_dossier_job.
| Argument | Type | Required | Description |
|---|---|---|---|
| dossierId | string | no | An existing sealed dossier to draw evidence from. |
| profile | object | no | Profile JSON. |
| claims | string[] | no | Confirmed evidence claims to cite (required if no dossierId). |
| evidence | string | no | Supporting evidence text. |
| jd | string | no | Optional target job description. |
Run the full Assay pipeline — extract → grade → seal — and get back a complete Career Dossier: ATS + designed résumé, cover letter, story bank, fit map, portfolio, plus an EIP-712 seal on X Layer. Price: 2 USDT (x402 on X Layer, eip155:196). Returns a jobId immediately (the pipeline is async, gotcha: never blocks a marketplace client). Example: {resumeText:"…", jd:"…"} → {jobId}. Poll asy_job_status, fetch asy_job_result. Proof promise: every artifact is graded against the published Standard and sealed.
| Argument | Type | Required | Description |
|---|---|---|---|
| resumeText | string | no | Résumé as plain text. |
| resumeB64 | string | no | Résumé as base64 (PDF or DOCX). Provide `filename` so the type is known. |
| filename | string | no | Original filename, e.g. "resume.pdf" — used to pick the parser. |
| jd | string | no | |
| answers | string | no | Answers to clarifying questions. |
| variant | unknown | no | Dossier family. Defaults to job. |
| dateFrom | string | no | Promotion review range start (YYYY-MM). |
| dateTo | string | no | Promotion review range end (YYYY-MM). |
Check a dossier job: queued / running / done / failed. Free. Example: {jobId:"job_…"}.
| Argument | Type | Required | Description |
|---|---|---|---|
| jobId | string | yes |
Fetch a finished dossier's artifacts (signed download links), tribunal summary and seal. Free. (Paid once at create.) Example: {jobId:"job_…"}.
| Argument | Type | Required | Description |
|---|---|---|---|
| jobId | string | yes |
Verify a dossier's on-chain seal: pass a dossierId or a raw leaf → {found, sealStatus, anchoredAt, explorerLink}. Free. FREE FOREVER — anyone can check a seal. Proof promise: reads the AssayRegistry directly on X Layer.
| Argument | Type | Required | Description |
|---|---|---|---|
| dossierId | string | no | |
| leaf | string | no |

