Getting started

Start with a maintained package, keep package and protocol versions distinct, and verify signed bundles before use.

Published 4.2.0. Registry releases exist for every artifact; conformance claims remain same-program evidence, not independent interoperability testing. The packages were released on 3 September 2026 from signed tag v4.2.0 at the commit recorded in the publication state. Install from the registry, or build that commit from a VCP-SDK checkout with the source command under each registry command.

What VCP is

The Value Context Protocol (VCP) sends the what and keeps the why. It carries values, constraints, and current state between compatible services and agents as short, readable context they can act on without learning the private reasons behind it. The specification covers identity, constitutional semantics, signed bundle transport, adaptation context, and optional extensions.

VCP supplies protocol types and verification machinery. Applications remain responsible for consent, minimization, storage, model-provider integration, policy design, human oversight, and operational security.

Version boundary

SurfaceStatus
Protocol source baselineVCP v3.1 (not yet an immutable release)
v3.2 adaptation amendments and VEP-0004 (four extra situational dimensions)Candidate or experimental
Python SDKvalue-context-protocol 4.2.0, published on PyPI
Rust SDKvcp-core 4.2.0, published on crates.io
TypeScript browser integration@creedspace/vcp-sdk 4.2.0, published on npm, WebMCP-focused rather than a full protocol port

Package and protocol versions are numbered separately, so a new SDK release does not mean a new protocol version. Negotiate candidate features with each peer before sending them, and state which protocol baseline each integration supports.

Python quick start

1. Install

# From PyPI
python3 -m venv .venv
. .venv/bin/activate
python -m pip install value-context-protocol==4.2.0

# Or from the root of a VCP-SDK checkout at the published commit (tag v4.2.0, c5035e9)
python -m pip install ./python

2. Parse identity and semantics

from vcp import CSM1Code, Token

identity = Token.parse("family.safe.guide@1.2.0")
profile = CSM1Code.parse("N5+F+E")

assert identity.canonical == "family.safe.guide"
assert profile.encode() == "N5+E+F"

A UVC token (the VCP/I identity token), such as family.safe.guide@1.2.0, names a constitution by domain, approach, and role, and can carry a version and namespace. A CSM-1 code compactly states a persona, an adherence level, and scopes, with an optional namespace or version. Encoding sorts the scopes alphabetically, which is why N5+F+E comes back as N5+E+F.

3. Encode adaptation context

from vcp.adaptation import (
    PersonalState,
    PersonalStateDimension,
    SituationalDimension,
    VCPContext,
)

context = VCPContext(
    situational={
        SituationalDimension.TIME: ["🌅"],
        SituationalDimension.SPACE: ["🏡"],
        SituationalDimension.COMPANY: ["👶"],
    },
    personal={
        PersonalStateDimension.ENERGY_LEVEL:
            PersonalState("fatigued", 4),
    },
)

wire = context.encode()
roundtrip = VCPContext.decode(wire)
assert roundtrip == context

The example uses three of the nine baseline situational dimensions: time, space, and company. VEP-0004 adds four more for a 13-dimension model, which remains a v3.2 candidate feature. The encoding is compact but plaintext, so treat encoded personal state as sensitive data.

4. Verify a signed bundle before injection

from vcp import Orchestrator, VerificationResult

result = Orchestrator(trust_config).verify(bundle)
if result is not VerificationResult.VALID:
    raise PermissionError("Rejected VCP bundle: " + result.name)

# Only the verified branch may format or inject bundle content.

Injection here means placing the bundle's constitution text into the model's context, which is why only verified content may reach it.

trust_config and bundle are application-owned inputs. The SDK repository's examples/python/05_full_pipeline.py shows the complete runnable flow with test keys, trust anchors, bundle construction, verification, and formatting.

TypeScript WebMCP quick start

1. Install

# From npm
npm install @creedspace/vcp-sdk@4.2.0

# Or from the root of a VCP-SDK checkout at the published commit (tag v4.2.0, c5035e9)
npm install ./webmcp

2. Register browser tools

import { registerVCPTools } from '@creedspace/vcp-sdk';

const registration = await registerVCPTools({
  chatEndpoint: '/api/chat',
  enableChat: false,
});

console.log(registration.registered);
registration.cleanup();

The package feature-detects document.modelContext, is safe during server rendering, and does not inject a remote polyfill. Applications that need a polyfill must bundle and pin it themselves.

This site also has its own TypeScript modules under $lib/vcp. Some of them drive the demo pages; others (context, audit, privacy, adaptation-rules, constitution, constitution-codes, nl-parser, transition-detection, scheduling, learning, multi-agent, safety) are reference code that no page imports. None of them is an npm package API.

Rust quick start

1. Install

# From crates.io, inside your own Cargo project
cargo add vcp-core@4.2.0

# Or from the root of a VCP-SDK checkout at the published commit (tag v4.2.0, c5035e9)
cargo build --manifest-path ./rust/Cargo.toml -p vcp-core

2. Parse

use vcp_core::{Csm1Code, VcpToken};

fn main() {
    let identity = VcpToken::parse(
        "family.safe.guide@1.2.0"
    ).expect("valid identity");
    let profile = Csm1Code::parse("N5+F+E")
        .expect("valid CSM-1");

    assert_eq!(identity.role(), "guide");
    assert_eq!(profile.encode(), "N5+E+F");
}

vcp-core also contains the trust, transport verification, context, hooks, composition, and revocation modules. Two further crates are published at 4.2.0: vcp-cli (cargo install vcp-cli@4.2.0) for the command line and vcp-wasm for WebAssembly.

Privacy checklist

  • Collect only context required for the declared purpose
  • Bind consent to platform, purpose, fields, and expiry
  • Keep sensitive personal state ephemeral unless continuity is explicitly enabled
  • Filter context at each stakeholder boundary
  • Apply decay and reject implausible future timestamps
  • Redact logs and define retention and deletion behavior
  • Test that candidate extensions are never sent silently to a peer that does not support them

Next steps