Atlas / MCP servers / decentralized-identity / Kya Os Mcp

Kya Os McpBLOCK

mcp/decentralized-identity/kya-os-mcp

KYA-OS MCP protocol reference implementation — delegation, proof generation, session lifecycle, and cryptographic identity for the Model Context Protocol

Verdict
BLOCK
Grade
D
Trust score
63 /100
Exposed tools
21 17r · 3w · 1d
Transport
sse · stdio · streamable-http
License
MIT
Stars
31
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

KYA-OS: agent identity, delegation, and proof. This repo is the MCP binding.

What KYA-OS is

KYA-OS (Know Your Agent Operating System) is an identity, authority, and accountability layer that other agent-facing protocols adopt, so that any time an agent acts you can verify who called (agent identity), under what authority (delegation chain rooted at a Responsible Party, plus consent where required), and what they did (signed proofs composing into audit trails).

The shape of the contribution is roughly analogous to TLS. TLS is not a transport, it is a security layer that transports adopt. KYA-OS is not a transport or a runtime, it is an identity and accountability layer that host protocols embed.

Three jobs, six primitives:

  • Identity. Every agent and every server holds a Decentralized Identifier (did:key, did:web): a stable, cryptographically-controlled identifier that the agent can prove it owns, and that credentials can be issued against. Without this, there is nothing to bind authority to or hold accountable.
  • Authority. W3C Verifiable Credentials carrying scoped, revocable delega
Read from source at commit 1a93c144f38fOBSERVED · 2026-10-12
Advertisement
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code (npm)
claude mcp add brave-search-mcp-server --env BRAVE_API_KEY=${BRAVE_API_KEY} -- npx -y @brave/[email protected]
03

Exposed tools (21)

17 read · 3 write · 1 destructive. Blast radius: 1 tool can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
_kyaosread
_kyaos_handshakereadKYA-OS identity handshake — establishes a cryptographic session
addwrite
browsereadBrowse product categories (public — no delegation required)
check_balancereadCheck your cheqd testnet wallet balance and address.
checkoutwriteComplete a purchase (requires delegation with scope: cart:write)
delete_recorddestructiveA destructive action gated by the policy step-up: returns needs_approval until signed approval grants are supplied in _kyaos_approvals.
echoread
fetch-docsread
get_reportread
greetreadReturns a greeting with a signed Ed25519 proof
pingread
query-docsread
read_vaultreadRead the user vault. Protected: returns an authorization challenge on first call;
reportread
resolve-library-idread
restricted-toolread
restricted_greetreadA protected greeting that requires delegation (scope: greeting:restricted)
searchread
typedread
wallet_sendwriteSend CHEQ from your wallet on the cheqd testnet to a recipient. Your
04

Trust audit

BLOCKgrade D · trust 63/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (1 observation(s))
Network
declared (1 observation(s))
Shell
none-observed
Dependencies
not all pinned
Secrets in source
found

Findings (25)

CRITICALHard-coded secrets · secret.private_key · CWE-798, CWE-321
src/proof/generator.ts:445
'-----BEGIN PRIVATE KEY-----\n' +
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
src/middleware/__tests__/audit-instrumentation.test.ts:48
await handler({ secret: 'never-audit-raw-args' });
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
delete_record
Why it matters. 1 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWInventory / provenance · inv.binary · CWE-1104
examples/authz-inspector/src/session.ts
session.ts
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.hidden_file · CWE-1104
examples/brave-search-mcp-server/.prettierignore
.prettierignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
conformance/__tests__/adapter-helpers.test.ts:9
import type { DIDDocument, VerificationMethod } from '../../src/index.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
conformance/__tests__/status-list-vectors.test.ts:11
import { BitstringManager } from '../../src/delegation/bitstring.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
conformance/__tests__/suite-immutability.test.ts:19
import { canonicalizeJSON } from '../../src/delegation/utils.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
examples/audit-trail/walkthrough.ts:2
import { NodeCryptoProvider } from '../../src/providers/node-crypto.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
examples/audit-trail/walkthrough.ts:15
} from '../../src/audit/index.js';
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
CHANGELOG.md:1487
RFC-1918 IP-literal hosts (e.g. `did:web:169.254.169.254`, the cloud-metadata
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
SECURITY.md:83
`RuntimeFetchProvider` resolves `did:web` and fetches StatusList2021 credentials over the network, and the target host is named by counterparty-controlled data — the DID or status-list URL embedded in
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
SPEC-ENTITY-CARD.md:392
link-local (`169.254/16` incl. the `169.254.169.254` cloud-metadata endpoint, `fe80::/10`), CGNAT
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
SPEC-ENTITY-CARD.md:935
`169.254.169.254` explicitly denied, resolve-once-and-pin against DNS rebinding, no cross-origin
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
src/__tests__/providers/runtime-fetch.test.ts:173
expect(await provider.resolveDID('did:web:169.254.169.254')).toBeNull();
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
src/__tests__/providers/runtime-fetch.test.ts:190
expect(await provider.fetchStatusList('http://169.254.169.254/status')).toBeNull();
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
src/delegation/__tests__/did-web-resolver.test.ts:145
expect(didWebToUrl('did:web:127.0.0.1%3A8443')).toBe('https://127.0.0.1:8443/.well-known/did.json');
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
src/utils/__tests__/safe-fetch.test.ts:330
base = `http://127.0.0.1:${(server.address() as AddressInfo).port}`;
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
conformance/verify.py:266
return bytes.fromhex(value[len(prefix):])
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
src/__tests__/integration/mcp-enhance-server.test.ts:343
expect(() => atob(identity.privateKey)).not.toThrow();
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
src/__tests__/integration/mcp-enhance-server.test.ts:344
expect(() => atob(identity.publicKey)).not.toThrow();
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
src/delegation/__tests__/vc-jwt.test.ts:155
const header = JSON.parse(atob(encodedHeader.replace(/-/g, '+').replace(/_/g, '/')));
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
src/delegation/__tests__/vc-jwt.test.ts:156
const payload = JSON.parse(atob(encodedPayload.replace(/-/g, '+').replace(/_/g, '/')));
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
examples/authz-inspector/package.json
@modelcontextprotocol/sdk, @types/node, tsx, typescript, vitest
Why it matters. 5 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
examples/brave-search-mcp-server/package.json
@smithery/cli, tsx
Why it matters. 2 dependency range(s) float
Fix. pin exact versions or ship a lockfile

Gates applied: critical_finding, no_behavioural_pass.

Audited 2026-10-12 · audit v0.4.1 · source sha 1a93c144f38ffull audit observations/trust-audit/mcp-server/decentralized-identity__kya-os-mcp.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-121a93c144f38fBLOCKD63first audit
06

Questions

What is the @kya-os/mcp MCP server?

KYA-OS MCP protocol reference implementation — delegation, proof generation, session lifecycle, and cryptographic identity for the Model Context Protocol

What tools does @kya-os/mcp expose?

21 in total: 17 read-only, 3 that write, and 1 that can delete or overwrite (delete_record). Every one is listed on this page with its risk.

Is @kya-os/mcp safe to connect to an agent?

No — not without reading the findings first. The audit graded it D (63/100) and found 1 critical or high issue in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 1 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does @kya-os/mcp need?

It reads AUTH_SERVER_URL, BRAVE_API_KEY, CLIENT_IP_ENCRYPTION_KEY and CONTEXT7_API_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does @kya-os/mcp run?

It speaks sse, stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as @kya-os/mcp at 1.19.0.

How current is this page?

The grade is for one exact copy of the source (1a93c144f38f), read on 2026-10-12. The repository is watched and re-audited when it changes.

Advertisement