kya-brasil

KYA backed by a real company: e-CNPJ-signed agent mandates, revocation-checked, signed verdicts

我该使用它吗

质量与安全性

A
描述质量
93%
模式完整度
92%
命名质量
80%
投毒风险
100%
权限匹配度
100%
协议合规性
100%

发现(3)

  • LOWTool 'kya_renew' description lacks action verb在 kya_renew 中
  • LOWTool 'kya_verify' description lacks action verb在 kya_verify 中
  • LOWTool 'kya_about' description lacks action verb在 kya_about 中

基于对工具定义和协议合规性的自动分析。

上下文开销

~4,255token 数(工具定义)
~2.0 KB典型响应大小
对注意力有显著影响(占 128k 上下文窗口的 3.32%)

这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 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#"
}

社区

评价此服务器

证据

最近观测

已验证未记录版本15 个工具