kya-brasil
KYA backed by a real company: e-CNPJ-signed agent mandates, revocation-checked, signed verdicts
我該用這個嗎
品質與安全性
發現項目(3)
- LOW在 kya_renew 中
- LOW在 kya_verify 中
- LOW在 kya_about 中
根據工具定義與協定合規性的自動化分析。
上下文成本
這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。
安裝
一鍵安裝
將以下內容加入你的 `claude_desktop_config.json` 檔案:
{
"mcpServers": {
"kya-brasil": {
"url": "https://kya-br-agents.marcelfons.workers.dev/mcp"
}
}
}遠端端點
https://kya-br-agents.marcelfons.workers.dev/mcpstreamable-http它能做什麼
工具清單
工具(15)
⚪kya_register(agent, cnpj, principal, mandate)
Register an AI agent for a Brazilian company: agent key (EVM address or Web Bot Auth Ed25519 key), CNPJ and a mandate (JSON, validated against /.well-known/kya-mandate.schema.json). Returns a one-time challenge the agent signs with its key and the company signs with its e-CNPJ (CMS/PKCS#7). Price covers the checks at issuance.
輸入結構描述
{
"type": "object",
"properties": {
"agent": {
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"evm",
"web-bot-auth",
"erc8004"
],
"description": "evm: an Ethereum-style wallet (EIP-191 signatures). web-bot-auth: an Ed25519 key (RFC 9421 / Web Bot Auth). erc8004: an agent registered in an ERC-8004 Identity Registry; its on-chain agentWallet signs."
},
"id": {
"type": "string",
"minLength": 20,
"maxLength": 160,
"description": "0x address for evm; base64url raw Ed25519 public key for web-bot-auth; eip155:<chainId>:<identityRegistry>:<agentId> for erc8004."
}
},
"required": [
"kind",
"id"
]
},
"cnpj": {
"description": "The company's CNPJ (company agents). Leave out with principal \"person\".",
"type": "string",
"minLength": 14,
"maxLength": 18
},
"principal": {
"description": "\"person\": the agent acts for a natural person who signs with an e-CPF (no CNPJ; no name or CPF is ever published).",
"type": "string",
"enum": [
"company",
"person"
]
},
"mandate": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {},
"description": "Mandate JSON validated by https://kya-br-agents.marcelfons.workers.dev/.well-known/kya-mandate.schema.json. Reserved fields: actions, max_per_operation, max_per_day, currencies, counterparties, valid_from, valid_until."
}
},
"required": [
"agent",
"mandate"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢kya_verify_paid(credential_id)
Same as the free verification, without daily limit, plus a signed receipt of the verification itself (what was checked, when). Pay per call with x402.
輸入結構描述
{
"type": "object",
"properties": {
"credential_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "credential_id returned by kya_register."
}
},
"required": [
"credential_id"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢kya_check_action(credential_id, action, amount, currency, counterparty, ...)
Signed verdict: is this action (action, amount, currency, counterparty, payment instrument) inside the agent's mandate and is the credential active? Evaluates the reserved mandate fields; lists the fields it did not evaluate.
輸入結構描述
{
"type": "object",
"properties": {
"credential_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "credential_id returned by kya_register."
},
"action": {
"description": "Action the agent wants to perform (e.g. pay, order, sign).",
"type": "string",
"maxLength": 64
},
"amount": {
"type": "number",
"minimum": 0
},
"currency": {
"description": "BRL, USDC, ...",
"type": "string",
"maxLength": 12
},
"counterparty": {
"description": "CNPJ, domain or wallet address of the other side.",
"type": "string",
"maxLength": 128
},
"spent_today": {
"description": "What this agent already spent today, if you track it (used for max_per_day).",
"type": "number",
"minimum": 0
},
"payment_network": {
"description": "Payment network or rail of this operation: visa, mastercard, elo, pix, ...",
"type": "string",
"maxLength": 32
},
"payment_ref_sha256": {
"description": "SHA-256 hex of the payment token reference or PAR used (never a card number); checked against mandate.payment_instruments.",
"type": "string",
"pattern": "^[0-9a-fA-F]{64}$"
}
},
"required": [
"credential_id"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪kya_renew(credential_id)
Re-issue the credential for 90 more days. The company signs the renewal challenge with an e-CNPJ in force (not revoked); the company must still be ATIVA at the Receita.
輸入結構描述
{
"type": "object",
"properties": {
"credential_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "credential_id returned by kya_register."
}
},
"required": [
"credential_id"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡kya_prove(credential_id, challenge_id, agent_signature, ecnpj_signature)
Free. Send both signatures of the challenge. The e-CNPJ chain is validated against ICP-Brasil roots, the CNPJ must match, the certificate must not be revoked (CRL) and the company must be ATIVA; then the credential is issued (90 days, Ed25519-signed).
輸入結構描述
{
"type": "object",
"properties": {
"credential_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "credential_id returned by kya_register."
},
"challenge_id": {
"type": "string",
"description": "challenge.id from kya_register (or kya_renew)."
},
"agent_signature": {
"type": "string",
"description": "Signature of challenge.text by the agent key: EIP-191 personal_sign hex (evm) or raw Ed25519 base64url (web-bot-auth)."
},
"ecnpj_signature": {
"type": "string",
"description": "CMS/PKCS#7 SignedData (detached, base64 DER) of challenge.text, signed with the company's e-CNPJ certificate."
}
},
"required": [
"credential_id",
"challenge_id",
"agent_signature",
"ecnpj_signature"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢kya_principal_match(credential_id, cpf)
Signed answer ($0.01) for a person's agent (principal.kind person): does the CPF you already have match the e-CPF holder behind it? On a match, a subject_ref of your own for that person (stable for you, different for every verifier). The CPF is never stored, published or revealed; 3 non-matching answers per credential stop your checks. The person sees every check.
輸入結構描述
{
"type": "object",
"properties": {
"credential_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "credential_id returned by kya_register."
},
"cpf": {
"type": "string",
"minLength": 11,
"maxLength": 14,
"description": "The CPF you already have for this person; used for the comparison only, never stored."
}
},
"required": [
"credential_id",
"cpf"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢kya_person_agents(signed_text, ecpf_signature)
Free, person only: every live credential behind your e-CPF and every CPF check made against each one. Sign "KYA Brasil: my agents\nat: <ISO time>" with the e-CPF (valid 10 minutes).
輸入結構描述
{
"type": "object",
"properties": {
"signed_text": {
"type": "string",
"description": "\"KYA Brasil: my agents\\nat: <ISO time>\""
},
"ecpf_signature": {
"type": "string",
"description": "CMS/PKCS#7 of signed_text with the person's e-CPF, base64 DER."
}
},
"required": [
"signed_text",
"ecpf_signature"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢kya_sign_link(credential_id, challenge_id, agent_signature)
Free. Link for whoever holds the company's e-CNPJ (owner, accountant): give challenge_id and the agent's signature, get the /sign URL. They see agent, company and mandate and sign in the browser (A1 .pfx) or with any ICP-Brasil signer (A3 token, cloud), or run kya-sign (npm @kya-brasil/agent-tools) with the link. The issuer never sees the certificate.
輸入結構描述
{
"type": "object",
"properties": {
"credential_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "credential_id returned by kya_register."
},
"challenge_id": {
"type": "string",
"description": "challenge.id from kya_register or kya_renew."
},
"agent_signature": {
"description": "The agent's signature of challenge.text, so the person only signs with the e-CNPJ.",
"type": "string",
"maxLength": 600
}
},
"required": [
"credential_id",
"challenge_id"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢kya_verify(credential_id, agent)
Free (50/day per IP). The agent's current credential: principal company, mandate, status (active, suspended, revoked, expired) and signature. Also by key: /v1/agents/by-key?kind=&id=.
輸入結構描述
{
"type": "object",
"properties": {
"credential_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "credential_id returned by kya_register."
},
"agent": {
"description": "Alternative to credential_id: look up active credentials by agent key.",
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"evm",
"web-bot-auth",
"erc8004"
],
"description": "evm: an Ethereum-style wallet (EIP-191 signatures). web-bot-auth: an Ed25519 key (RFC 9421 / Web Bot Auth). erc8004: an agent registered in an ERC-8004 Identity Registry; its on-chain agentWallet signs."
},
"id": {
"type": "string",
"minLength": 20,
"maxLength": 160,
"description": "0x address for evm; base64url raw Ed25519 public key for web-bot-auth; eip155:<chainId>:<identityRegistry>:<agentId> for erc8004."
}
},
"required": [
"kind",
"id"
]
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡kya_renew_prove(credential_id, challenge_id, agent_signature, ecnpj_signature)
Free. Second step of kya_renew: send both signatures of the renewal challenge; the credential is re-issued for 90 days if the e-CNPJ is not revoked and the company is still ATIVA.
輸入結構描述
{
"type": "object",
"properties": {
"credential_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "credential_id returned by kya_register."
},
"challenge_id": {
"type": "string",
"description": "challenge.id from kya_register (or kya_renew)."
},
"agent_signature": {
"type": "string",
"description": "Signature of challenge.text by the agent key: EIP-191 personal_sign hex (evm) or raw Ed25519 base64url (web-bot-auth)."
},
"ecnpj_signature": {
"type": "string",
"description": "CMS/PKCS#7 SignedData (detached, base64 DER) of challenge.text, signed with the company's e-CNPJ certificate."
}
},
"required": [
"credential_id",
"challenge_id",
"agent_signature",
"ecnpj_signature"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🔴kya_revoke(credential_id, signed_text, ecnpj_signature, reason)
Free. The company revokes the credential at once (e-CNPJ-signed request). Revocations are listed at /v1/revocations.
輸入結構描述
{
"type": "object",
"properties": {
"credential_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "credential_id returned by kya_register."
},
"signed_text": {
"type": "string",
"description": "Exactly \"KYA Brasil: revoke <credential_id>\" followed by a newline and a nonce of your choice."
},
"ecnpj_signature": {
"type": "string",
"description": "CMS/PKCS#7 SignedData (detached, base64 DER) of signed_text with the company's e-CNPJ."
},
"reason": {
"type": "string",
"maxLength": 200
}
},
"required": [
"credential_id",
"signed_text",
"ecnpj_signature"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢kya_company_agents(cnpj, signed_text, ecnpj_signature)
Free, company only. Every credential ever registered for your CNPJ, any status, whoever held the certificate (an accountant, another employee). Request signed with your e-CNPJ over "KYA Brasil: agents <cnpj>" + "at: <ISO time>".
輸入結構描述
{
"type": "object",
"properties": {
"cnpj": {
"type": "string",
"maxLength": 20,
"description": "The company's CNPJ."
},
"signed_text": {
"type": "string",
"maxLength": 1200,
"description": "\"KYA Brasil: <agents|webhook> <cnpj>\", for the webhook a \"url: <https url or ->\" line, then \"at: <ISO time>\" (within 10 minutes)."
},
"ecnpj_signature": {
"type": "string",
"description": "CMS/PKCS#7 SignedData of signed_text with the company's e-CNPJ, detached, base64 DER."
}
},
"required": [
"cnpj",
"signed_text",
"ecnpj_signature"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪kya_company_webhook(cnpj, signed_text, ecnpj_signature)
Free, company only. Sets the https URL that receives signed events about your agents: credential issued, renewed, suspended, reinstated, revoked. Request signed with your e-CNPJ; url "-" removes it.
輸入結構描述
{
"type": "object",
"properties": {
"cnpj": {
"type": "string",
"maxLength": 20,
"description": "The company's CNPJ."
},
"signed_text": {
"type": "string",
"maxLength": 1200,
"description": "\"KYA Brasil: <agents|webhook> <cnpj>\", for the webhook a \"url: <https url or ->\" line, then \"at: <ISO time>\" (within 10 minutes)."
},
"ecnpj_signature": {
"type": "string",
"description": "CMS/PKCS#7 SignedData of signed_text with the company's e-CNPJ, detached, base64 DER."
}
},
"required": [
"cnpj",
"signed_text",
"ecnpj_signature"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢kya_revocations(since)
Free. Credentials revoked since a date (default: last 30 days), for verifiers that cache credentials.
輸入結構描述
{
"type": "object",
"properties": {
"since": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢kya_about
Free. What KYA Brasil is, how the credential flow works, prices, and where the schemas and signing keys are.
輸入結構描述
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}社群
證據