# io.github.celfons/kya-brasil (remote · kya-br-agents.marcelfons.workers.dev)

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

- Trust score: 58/100 (low)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-18

## Components

- remote · `kya-br-agents.marcelfons.workers.dev`: 58/100 (this document), [markdown](https://verifymcp.io/servers/celfons-kya-brasil/kya-br-agents.md), [page](https://verifymcp.io/servers/celfons-kya-brasil/kya-br-agents)

## Channel facts

- Endpoint: `https://kya-br-agents.marcelfons.workers.dev/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `0.4.1`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-18.

- **Endpoint Security**: 46/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (kya_revoke).
  - HTTPS enforcement could not be verified: the plaintext port answered with HTTP 406, which proves neither a plaintext path nor enforcement.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 68/100
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 1873 tokens (~124/item across 15 items; 15 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability check failed: schema churn in the 5 days we've observed: 4 tool removals, 0 breaking changes, 0 auth/transport breaks, 5 additions.
- **Tool Coverage**: 97/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 90% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 15 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the io.github.celfons/kya-brasil MCP server?

io.github.celfons/kya-brasil is a hosted endpoint at https://kya-br-agents.marcelfons.workers.dev/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http celfons-kya-brasil 'https://kya-br-agents.marcelfons.workers.dev/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "celfons-kya-brasil": {
      "url": "https://kya-br-agents.marcelfons.workers.dev/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "celfons-kya-brasil": {
      "type": "http",
      "url": "https://kya-br-agents.marcelfons.workers.dev/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.celfons-kya-brasil]
url = "https://kya-br-agents.marcelfons.workers.dev/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "celfons-kya-brasil": {
      "type": "remote",
      "url": "https://kya-br-agents.marcelfons.workers.dev/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add celfons-kya-brasil --url 'https://kya-br-agents.marcelfons.workers.dev/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  celfons-kya-brasil:
    url: "https://kya-br-agents.marcelfons.workers.dev/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "celfons-kya-brasil": {
      "Transport": "http",
      "Url": "https://kya-br-agents.marcelfons.workers.dev/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add celfons-kya-brasil -t streamable-http -u 'https://kya-br-agents.marcelfons.workers.dev/mcp'
```

### Other

```json
{
  "mcpServers": {
    "celfons-kya-brasil": {
      "type": "http",
      "url": "https://kya-br-agents.marcelfons.workers.dev/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-15 (score 58, −1)

- [security] Tool “kya_check_action” rewrote its description, which is the text the model reads
- [functional regression] Schema quality: 1378 → 1873
- [functional] Server version: 0.6.0 → 0.12.1
- [functional] New tool “kya_person_agents”
- [functional] New tool “kya_principal_match”
- [functional] New tool “kya_sign_link”
- [cosmetic] “kya_check_action” added an optional parameter “payment_network”
- [cosmetic] “kya_check_action” added an optional parameter “payment_ref_sha256”
- [cosmetic] “kya_register” added an optional parameter “principal”
- [cosmetic] “kya_register” reworded the description of “cnpj”
- [cosmetic] “kya_register” made “cnpj” optional

### 2026-10-14 (score 59, +2)

- [security regression] Stability: unverified → fail
- [security regression] Tool “kya_act” was removed
- [security regression] Tool “kya_act_text” was removed
- [security regression] Tool “kya_acts_export” was removed
- [security regression] Tool “kya_register_act” was removed
- [security] Tool “kya_verify” rewrote its description, which is the text the model reads
- [functional improvement] Tool coverage: 65% → 88%
- [functional improvement] Schema quality: 1532 → 1378
- [functional] Server version: 0.4.1 → 0.6.0
- [functional] New tool “kya_company_agents”
- [functional] New tool “kya_company_webhook”

### 2026-10-13 (score 57)

First indexed and scored.

## MCP tools (15)

### `kya_register` (~213 tokens)

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.

Input parameters:

- `agent` (object, required)
- `cnpj` (string): The company's CNPJ (company agents). Leave out with principal "person".
- `mandate` (object, required): 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…
- `principal` (string): "person": the agent acts for a natural person who signs with an e-CPF (no CNPJ; no name or CPF is ever published).

### `kya_verify_paid` (~55 tokens)

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.

Input parameters:

- `credential_id` (string, required): credential_id returned by kya_register.

### `kya_check_action` (~212 tokens)

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.

Input parameters:

- `action` (string): Action the agent wants to perform (e.g. pay, order, sign).
- `amount` (number)
- `counterparty` (string): CNPJ, domain or wallet address of the other side.
- `credential_id` (string, required): credential_id returned by kya_register.
- `currency` (string): BRL, USDC, ...
- `payment_network` (string): Payment network or rail of this operation: visa, mastercard, elo, pix, ...
- `payment_ref_sha256` (string): SHA-256 hex of the payment token reference or PAR used (never a card number); checked against mandate.payment_instruments.
- `spent_today` (number): What this agent already spent today, if you track it (used for max_per_day).

### `kya_renew` (~62 tokens)

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.

Input parameters:

- `credential_id` (string, required): credential_id returned by kya_register.

### `kya_prove` (~182 tokens)

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).

Input parameters:

- `agent_signature` (string, required): Signature of challenge.text by the agent key: EIP-191 personal_sign hex (evm) or raw Ed25519 base64url (web-bot-auth).
- `challenge_id` (string, required): challenge.id from kya_register (or kya_renew).
- `credential_id` (string, required): credential_id returned by kya_register.
- `ecnpj_signature` (string, required): CMS/PKCS#7 SignedData (detached, base64 DER) of challenge.text, signed with the company's e-CNPJ certificate.

### `kya_principal_match` (~130 tokens)

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.

Input parameters:

- `cpf` (string, required): The CPF you already have for this person; used for the comparison only, never stored.
- `credential_id` (string, required): credential_id returned by kya_register.

### `kya_person_agents` (~106 tokens)

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).

Input parameters:

- `ecpf_signature` (string, required): CMS/PKCS#7 of signed_text with the person's e-CPF, base64 DER.
- `signed_text` (string, required): "KYA Brasil: my agents\nat: <ISO time>"

### `kya_sign_link` (~157 tokens)

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.

Input parameters:

- `agent_signature` (string): The agent's signature of challenge.text, so the person only signs with the e-CNPJ.
- `challenge_id` (string, required): challenge.id from kya_register or kya_renew.
- `credential_id` (string, required): credential_id returned by kya_register.

### `kya_verify` (~89 tokens)

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=.

Input parameters:

- `agent` (object): Alternative to credential_id: look up active credentials by agent key.
- `credential_id` (string): credential_id returned by kya_register.

### `kya_renew_prove` (~164 tokens)

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.

Input parameters:

- `agent_signature` (string, required): Signature of challenge.text by the agent key: EIP-191 personal_sign hex (evm) or raw Ed25519 base64url (web-bot-auth).
- `challenge_id` (string, required): challenge.id from kya_register (or kya_renew).
- `credential_id` (string, required): credential_id returned by kya_register.
- `ecnpj_signature` (string, required): CMS/PKCS#7 SignedData (detached, base64 DER) of challenge.text, signed with the company's e-CNPJ certificate.

### `kya_revoke` (~124 tokens)

Free. The company revokes the credential at once (e-CNPJ-signed request). Revocations are listed at /v1/revocations.

Input parameters:

- `credential_id` (string, required): credential_id returned by kya_register.
- `ecnpj_signature` (string, required): CMS/PKCS#7 SignedData (detached, base64 DER) of signed_text with the company's e-CNPJ.
- `reason` (string)
- `signed_text` (string, required): Exactly "KYA Brasil: revoke <credential_id>" followed by a newline and a nonce of your choice.

### `kya_company_agents` (~160 tokens)

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>".

Input parameters:

- `cnpj` (string, required): The company's CNPJ.
- `ecnpj_signature` (string, required): CMS/PKCS#7 SignedData of signed_text with the company's e-CNPJ, detached, base64 DER.
- `signed_text` (string, required): "KYA Brasil: <agents|webhook> <cnpj>", for the webhook a "url: <https url or ->" line, then "at: <ISO time>" (within 10 minutes).

### `kya_company_webhook` (~148 tokens)

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.

Input parameters:

- `cnpj` (string, required): The company's CNPJ.
- `ecnpj_signature` (string, required): CMS/PKCS#7 SignedData of signed_text with the company's e-CNPJ, detached, base64 DER.
- `signed_text` (string, required): "KYA Brasil: <agents|webhook> <cnpj>", for the webhook a "url: <https url or ->" line, then "at: <ISO time>" (within 10 minutes).

### `kya_revocations` (~38 tokens)

Free. Credentials revoked since a date (default: last 30 days), for verifiers that cache credentials.

Input parameters:

- `since` (string)

### `kya_about` (~33 tokens)

Free. What KYA Brasil is, how the credential flow works, prices, and where the schemas and signing keys are.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/celfons-kya-brasil/kya-br-agents#diagnostics

## Score history

- 2026-10-18: 58
- 2026-10-17: 58
- 2026-10-16: 58
- 2026-10-15: 58
- 2026-10-14: 59
- 2026-10-13: 57

## Common questions

### What is the io.github.celfons/kya-brasil MCP server?

io.github.celfons/kya-brasil is an MCP server listed in the public MCP registry as io.github.celfons/kya-brasil. KYA backed by a real company: e-CNPJ-signed agent mandates, revocation-checked, signed verdicts. This page covers its hosted endpoint (https://kya-br-agents.marcelfons.workers.dev/mcp).

### Is the io.github.celfons/kya-brasil MCP server safe to use?

io.github.celfons/kya-brasil scores 58 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the io.github.celfons/kya-brasil MCP server expose?

io.github.celfons/kya-brasil exposes 15 tools: kya_register, kya_verify_paid, kya_check_action, kya_renew, kya_prove, and 10 more. Their descriptions and schemas cost roughly 1,873 tokens of context every time the server is loaded.

### Does the io.github.celfons/kya-brasil MCP server require authentication?

No. We connected to io.github.celfons/kya-brasil without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

### Is the io.github.celfons/kya-brasil MCP server still maintained?

io.github.celfons/kya-brasil is still listed as active in the MCP registry. We last reached this channel on 18 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://kya-br-agents.marcelfons.workers.dev/mcp
- Website: https://kya-br-agents.marcelfons.workers.dev/
- Changelog RSS feed: https://verifymcp.io/servers/celfons-kya-brasil/kya-br-agents.xml
- Changelog JSON feed: https://verifymcp.io/servers/celfons-kya-brasil/kya-br-agents.json
- HTML version of this page: https://verifymcp.io/servers/celfons-kya-brasil/kya-br-agents
