JACS gives agents a persistent cryptographic identity to sign JSON and verify
messages, artifacts and identity updates. New identities use pq2025
(ML-DSA-87); classical algorithms require an explicit choice, with no automatic
fallback. Keep the same key across sessions; rotate it deliberately with a
signed identity transition.
Start with MCP. For direct service integration, jump to DID and post-quantum identity, A2A, or Rust, Node.js, Python and Go.
Install the CLI with Rust 1.97 or newer and start the local MCP server:
cargo install jacs-cli --locked
jacs mcpFor clients that use mcpServers, add:
{
"mcpServers": {
"jacs": { "command": "jacs", "args": ["mcp"] }
}
}The default server exposes jacs_verify_document over stdio. Verification uses
an independently trusted public key; check the returned valid field.
A valid signature establishes integrity under that key, not permission to act.
See client setup and local signing,
MCP use cases, and the tool contract.
To create an encrypted identity and sign locally from a terminal:
mkdir -m 700 .jacs
jacs create --output .jacs/agent.json > public-identity.json
printf '%s' '{"message":"hello"}' | jacs sign --agent .jacs/agent.json --input - > signed.json
jacs verify --public-identity public-identity.json --input signed.jsonThe CLI prompts for a password. Local MCP signing is an explicit opt-in:
jacs mcp --profile local-sign --agent .jacs/agent.json.
Passwords belong in the terminal or the host's secret manager, never command
arguments or MCP tool parameters. See the CLI guide.
DID and identity standards explains how the native
signing key appears in did:wba, JWK/JWKS and signed Agent Cards, including
ML-DSA-87 support and explicit ES256 compatibility. These integrations belong
to the native library workspace; the portable MCP server has no DID resolver
or A2A transport. The A2A quickstart covers discovery,
signed artifacts, explicit A2A 1.0 Node/Python APIs and current SDK examples.
| Integration | Install / guide |
|---|---|
| Native Rust | jacs = "=0.16.1"; library guide |
| Node.js | npm install --save-exact @hai.ai/jacs@0.16.1 |
| Python | python -m pip install jacs==0.16.1 |
| Go | CGo and native library setup |
| Browser | WASM package and encrypted storage |
| Extended CLI / MCP | cargo install jacs-cli-compat --locked; executable jacs-compat; profiles |
Native packages remain supported in the separate
archive/native workspace. Its directory name does
not retire those APIs. See all packages and platform coverage
and examples.
Published packages and this checkout can differ. Version 0.16.1 has a recorded release inventory. Version 0.16.0 is the first release whose source includes the native PQ identity exports described in the identity integration guide. Later changes in this checkout are source work until a new release record lists them.
cargo build --locked -p jacs-cli
cargo run --locked -p jacs-cli -- mcp
cargo run --locked -p jacs-core --example portable_quickstart
cargo test --locked --workspaceThe active workspace is jacs-core, jacs-wasm, jacs-mobile, jacs-mcp and
jacs-cli. Native Node/Python/Go builds use make build-jacsnpm,
make build-jacspy and make build-jacsgo; make test-bindings tests installed
consumers. See developer commands,
shared Rust cache setup, development
and releases.
Default PQ keys are encrypted at rest and software-held while signing. Hardware-backed custody does not imply hardware ML-DSA signing. Native private file operations enforce Unix owner-only permissions and fail closed where the required ACL adapter is unavailable. See security and the platform custody guide.