vouch-protocol 2.2.0__tar.gz → 2.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {vouch_protocol-2.2.0/vouch_protocol.egg-info → vouch_protocol-2.2.1}/PKG-INFO +1 -1
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/pyproject.toml +1 -1
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_vouch_mcp.py +25 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/__init__.py +1 -1
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/mcp/__init__.py +28 -10
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1/vouch_protocol.egg-info}/PKG-INFO +1 -1
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/LICENSE +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/MANIFEST.in +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/README.md +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/setup.cfg +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_accountability.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_agent_enroll.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_attribution.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_audio_bridge.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_audit_trail.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_auditor.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_authority_state.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_authority_state_vectors.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_autosign.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_behavioral_attestation.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_bridge.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_budget.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_c2pa_formats.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_cache.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_canary.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_caveats.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_cli_init.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_cli_root.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_conformance.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_credential_gate.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_data_integrity.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_delegation_attenuation.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_deliberation.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_disconnected_edge.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_dtn_pads.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_dx_sugar.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_examples_robotics.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_fastapi_credential_gate.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_fleet.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_git_workflow.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_grade.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_halos_evidence.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_hardware_seam.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_hasura_integration.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_heartbeat.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_hybrid.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_hybrid_interop.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_intent_recheck.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_jcs.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_jcs_interop.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_liveness_conformance.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_mcp_server_shield.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_media_badge.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_media_native.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_merkle.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_mint_contributor_credential.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_multikey.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_nonce.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_orbital_accumulator.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_proof_of_integration.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_provenance.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_quorum.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_reasoning.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_receipts.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_recovery.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_reputation.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_reputation_aggregate.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_reputation_disputes.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_reputation_ledger.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_reputation_policy.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_reputation_portability.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_revocation.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_robot_access.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_robot_conformance.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_robot_consent.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_robot_custody.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_robot_embodiment.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_robot_fusion.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_robot_handover.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_robot_handshake_blackbox_passport.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_robot_identity.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_robot_lease_quorum.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_robot_lifecycle.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_robot_liveness_revocation.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_robot_odd.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_robot_perception.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_robot_pq.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_robot_provenance_capability.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_robot_root_identity.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_robot_safety_record.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_robot_swarm.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_robot_teleop.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_robot_wear.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_root_of_trust.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_root_of_trust_vectors.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_ros2_action_gate.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_runtime_vectors.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_scan.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_secure_key_custody.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_security_hardening.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_shield_guard.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_shield_rules.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_shield_vectors.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_signer_vc.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_status_list.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_threshold.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_threshold_loader.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_tool_registry.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_transparency.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_transport.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_transport_http_rendezvous.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_transport_rendezvous.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_transport_udna_sdk.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_trifecta.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_trust_check.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_trust_entropy.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_validator_server.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_vc.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_verifier_vc.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/accountability.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/agent.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/async_verifier.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/attenuation.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/attribution.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/attribution_cli.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/audio.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/audit_trail.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/auditor.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/authority_state.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/autosign.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/behavioral_attestation.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/bridge/__init__.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/bridge/audio_routes.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/bridge/config.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/bridge/server.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/budget.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/cache.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/canary.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/caveats.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/cli.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/config.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/conformance.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/credential.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/data_integrity.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/data_integrity_hybrid.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/deliberation.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/did_web.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/fleet.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/gate.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/grade.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/heartbeat.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/integrations/_common.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/integrations/a2a.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/integrations/adk.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/integrations/amnesia.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/integrations/autogen/__init__.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/integrations/autogpt/__init__.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/integrations/autogpt/commands.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/integrations/claude-code/settings.hooks.json +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/integrations/crewai/__init__.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/integrations/crewai/tool.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/integrations/fastapi.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/integrations/google.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/integrations/goose.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/integrations/hasura/__init__.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/integrations/hasura/webhook.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/integrations/langchain/__init__.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/integrations/langchain/tool.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/integrations/langgraph.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/integrations/mcp/__init__.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/integrations/mcp/server.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/integrations/mlflow.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/integrations/n8n.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/integrations/openai.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/integrations/safetensors.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/integrations/streamlit/__init__.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/integrations/streamlit/seal.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/integrations/vertex_ai/__init__.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/intent_recheck.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/jcs.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/keys.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/keystore.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/kms.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/liveness_conformance.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/mcp/_guard.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/mcp_guard.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/media/__init__.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/media/badge.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/media/c2pa.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/media/native.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/merkle.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/metrics.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/multikey.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/nonce.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/onboard.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/proof_of_integration.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/provenance.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/quorum.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/ratelimit.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/reasoning.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/receipts.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/recovery.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/registry.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/reputation.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/reputation_aggregate.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/reputation_disputes.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/reputation_ledger.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/reputation_policy.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/reputation_portability.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/revocation.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/__init__.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/_signing.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/_verify.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/access.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/accumulator.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/blackbox.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/bundle.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/capability.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/conformance.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/consent.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/custody.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/dtn_revocation.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/edge_trust.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/embodiment.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/freshness.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/fusion.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/geoscope.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/halos.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/handover.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/handshake.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/hardware.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/identity.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/lease.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/lifecycle.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/liveness.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/localization.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/odd.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/orbital.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/passport.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/perception.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/perception_consensus.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/physical_quorum.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/pq.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/presence.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/provenance.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/quorum_trust.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/revocation.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/root_identity.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/safety_record.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/swarm.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/teleop.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/robotics/wear.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/root_of_trust.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/scan/__init__.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/scan/detector.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/scan/patterns.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/seal.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/shield/__init__.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/shield/demo.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/shield/flight_recorder.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/shield/rules.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/shield/shield.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/shield/trust_registry.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/signer.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/ssrf.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/status_list.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/status_list_fetcher.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/threshold.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/tool_registry.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/transparency.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/transport/__init__.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/transport/base.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/transport/did_key.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/transport/envelope.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/transport/http_rendezvous.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/transport/http_transport.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/transport/manager.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/transport/rendezvous.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/transport/udna.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/trifecta.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/trust_check.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/trust_entropy.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/validator_server.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/vc.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/verification.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/verifier.py +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch_protocol.egg-info/SOURCES.txt +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch_protocol.egg-info/dependency_links.txt +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch_protocol.egg-info/entry_points.txt +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch_protocol.egg-info/requires.txt +0 -0
- {vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch_protocol.egg-info/top_level.txt +0 -0
|
@@ -441,3 +441,28 @@ def test_every_decision_is_logged_once(server, env, caplog):
|
|
|
441
441
|
deny_lines = [r for r in caplog.records if r.getMessage().startswith("DENY")]
|
|
442
442
|
assert len(deny_lines) == 1
|
|
443
443
|
assert "credential does not match request" in deny_lines[0].getMessage()
|
|
444
|
+
|
|
445
|
+
|
|
446
|
+
# ---------------------------------------------------------------------------
|
|
447
|
+
# SDK compatibility
|
|
448
|
+
# ---------------------------------------------------------------------------
|
|
449
|
+
|
|
450
|
+
|
|
451
|
+
def test_works_against_whichever_mcp_sdk_is_installed():
|
|
452
|
+
"""The SDK renamed its server class; both names reach the same subclass.
|
|
453
|
+
|
|
454
|
+
mcp 1.x ships `FastMCP`, mcp 2.x renamed it to `MCPServer`. Importing only
|
|
455
|
+
one of them made this module fail outright on the other line, so the base
|
|
456
|
+
class is chosen at import time and both names are exported.
|
|
457
|
+
"""
|
|
458
|
+
import vouch.mcp as module
|
|
459
|
+
|
|
460
|
+
assert module.MCPServer is module.FastMCP
|
|
461
|
+
assert isinstance(module._MCP_SDK_V2, bool)
|
|
462
|
+
|
|
463
|
+
# Whichever line is installed, the subclass really extends that SDK's class.
|
|
464
|
+
base = type(module.FastMCP).__mro__[0]
|
|
465
|
+
assert base is type
|
|
466
|
+
parents = [c.__name__ for c in module.FastMCP.__mro__]
|
|
467
|
+
assert parents[0] == "FastMCP"
|
|
468
|
+
assert any(name in parents for name in ("FastMCP", "MCPServer"))
|
|
@@ -53,20 +53,33 @@ from ._guard import (
|
|
|
53
53
|
|
|
54
54
|
logger = logging.getLogger(__name__)
|
|
55
55
|
|
|
56
|
+
# The official MCP Python SDK renamed its high-level server class for the
|
|
57
|
+
# 2026-07-28 protocol revision: mcp>=2.0 ships ``mcp.server.MCPServer`` while
|
|
58
|
+
# mcp 1.x ships ``mcp.server.fastmcp.FastMCP``. Their ``tool()`` decorators take
|
|
59
|
+
# the same shape, so one subclass covers both and the installed SDK decides
|
|
60
|
+
# which protocol revisions are spoken on the wire.
|
|
56
61
|
try:
|
|
57
|
-
from mcp.server
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
62
|
+
from mcp.server import MCPServer as _BaseServer # mcp >= 2.0
|
|
63
|
+
|
|
64
|
+
_MCP_SDK_V2 = True
|
|
65
|
+
except ImportError:
|
|
66
|
+
try:
|
|
67
|
+
from mcp.server.fastmcp import FastMCP as _BaseServer # mcp 1.x
|
|
68
|
+
|
|
69
|
+
_MCP_SDK_V2 = False
|
|
70
|
+
except ImportError as exc: # pragma: no cover
|
|
71
|
+
raise ImportError(
|
|
72
|
+
"vouch.mcp needs the MCP SDK. Install it with:\n"
|
|
73
|
+
" pip install 'vouch-protocol[mcp]'\n"
|
|
74
|
+
"or\n"
|
|
75
|
+
" pip install mcp\n"
|
|
76
|
+
f"(import error: {exc})"
|
|
77
|
+
) from exc
|
|
66
78
|
|
|
67
79
|
|
|
68
80
|
__all__ = [
|
|
69
81
|
"FastMCP",
|
|
82
|
+
"MCPServer",
|
|
70
83
|
"protect",
|
|
71
84
|
"GuardConfig",
|
|
72
85
|
"Refusal",
|
|
@@ -77,7 +90,7 @@ __all__ = [
|
|
|
77
90
|
]
|
|
78
91
|
|
|
79
92
|
|
|
80
|
-
class FastMCP(
|
|
93
|
+
class FastMCP(_BaseServer):
|
|
81
94
|
"""An MCP server whose tools are protected by default.
|
|
82
95
|
|
|
83
96
|
A thin subclass. The constructor takes everything the SDK's ``FastMCP``
|
|
@@ -249,3 +262,8 @@ def protect(server: Any, *, guard: Optional[ToolGuard] = None, **config: Any) ->
|
|
|
249
262
|
server.call_tool = guarded_call_tool # type: ignore[assignment]
|
|
250
263
|
server.vouch_guard = guard # type: ignore[attr-defined]
|
|
251
264
|
return server
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
#: The name the 2026-07-28 SDK uses for the same class. Both names refer to the
|
|
268
|
+
#: one subclass; which base it extends depends on the installed SDK.
|
|
269
|
+
MCPServer = FastMCP
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/tests/test_robot_handshake_blackbox_passport.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vouch_protocol-2.2.0 → vouch_protocol-2.2.1}/vouch/integrations/claude-code/settings.hooks.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|