agent_os_kernel 3.1.0__py3-none-any.whl

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.
Files changed (337) hide show
  1. agent_control_plane/__init__.py +662 -0
  2. agent_control_plane/a2a_adapter.py +543 -0
  3. agent_control_plane/adapter.py +417 -0
  4. agent_control_plane/agent_hibernation.py +394 -0
  5. agent_control_plane/agent_kernel.py +470 -0
  6. agent_control_plane/compliance.py +720 -0
  7. agent_control_plane/constraint_graphs.py +478 -0
  8. agent_control_plane/control_plane.py +854 -0
  9. agent_control_plane/example_executors.py +195 -0
  10. agent_control_plane/execution_engine.py +231 -0
  11. agent_control_plane/flight_recorder.py +846 -0
  12. agent_control_plane/governance_layer.py +435 -0
  13. agent_control_plane/hf_utils.py +563 -0
  14. agent_control_plane/interfaces/__init__.py +55 -0
  15. agent_control_plane/interfaces/kernel_interface.py +361 -0
  16. agent_control_plane/interfaces/plugin_interface.py +497 -0
  17. agent_control_plane/interfaces/protocol_interfaces.py +387 -0
  18. agent_control_plane/kernel_space.py +1009 -0
  19. agent_control_plane/langchain_adapter.py +424 -0
  20. agent_control_plane/lifecycle.py +3113 -0
  21. agent_control_plane/mcp_adapter.py +653 -0
  22. agent_control_plane/ml_safety.py +563 -0
  23. agent_control_plane/multimodal.py +727 -0
  24. agent_control_plane/mute_agent.py +422 -0
  25. agent_control_plane/observability.py +787 -0
  26. agent_control_plane/orchestrator.py +482 -0
  27. agent_control_plane/plugin_registry.py +750 -0
  28. agent_control_plane/policy_engine.py +954 -0
  29. agent_control_plane/process_isolation.py +777 -0
  30. agent_control_plane/shadow_mode.py +310 -0
  31. agent_control_plane/signals.py +493 -0
  32. agent_control_plane/supervisor_agents.py +430 -0
  33. agent_control_plane/time_travel_debugger.py +557 -0
  34. agent_control_plane/tool_registry.py +452 -0
  35. agent_control_plane/vfs.py +697 -0
  36. agent_kernel/__init__.py +69 -0
  37. agent_kernel/analyzer.py +435 -0
  38. agent_kernel/auditor.py +36 -0
  39. agent_kernel/completeness_auditor.py +237 -0
  40. agent_kernel/detector.py +203 -0
  41. agent_kernel/kernel.py +744 -0
  42. agent_kernel/memory_manager.py +85 -0
  43. agent_kernel/models.py +374 -0
  44. agent_kernel/nudge_mechanism.py +263 -0
  45. agent_kernel/outcome_analyzer.py +338 -0
  46. agent_kernel/patcher.py +582 -0
  47. agent_kernel/semantic_analyzer.py +316 -0
  48. agent_kernel/semantic_purge.py +349 -0
  49. agent_kernel/simulator.py +449 -0
  50. agent_kernel/teacher.py +85 -0
  51. agent_kernel/triage.py +152 -0
  52. agent_os/__init__.py +409 -0
  53. agent_os/_adversarial_impl.py +200 -0
  54. agent_os/_circuit_breaker_impl.py +232 -0
  55. agent_os/_mcp_metrics.py +193 -0
  56. agent_os/adversarial.py +20 -0
  57. agent_os/agents_compat.py +490 -0
  58. agent_os/audit_logger.py +135 -0
  59. agent_os/base_agent.py +651 -0
  60. agent_os/circuit_breaker.py +34 -0
  61. agent_os/cli/__init__.py +659 -0
  62. agent_os/cli/cmd_audit.py +128 -0
  63. agent_os/cli/cmd_init.py +152 -0
  64. agent_os/cli/cmd_policy.py +41 -0
  65. agent_os/cli/cmd_policy_gen.py +180 -0
  66. agent_os/cli/cmd_validate.py +258 -0
  67. agent_os/cli/mcp_scan.py +265 -0
  68. agent_os/cli/output.py +192 -0
  69. agent_os/cli/policy_checker.py +330 -0
  70. agent_os/compat.py +74 -0
  71. agent_os/constraint_graph.py +234 -0
  72. agent_os/content_governance.py +140 -0
  73. agent_os/context_budget.py +305 -0
  74. agent_os/credential_redactor.py +224 -0
  75. agent_os/diff_policy.py +89 -0
  76. agent_os/egress_policy.py +159 -0
  77. agent_os/escalation.py +276 -0
  78. agent_os/event_bus.py +124 -0
  79. agent_os/exceptions.py +180 -0
  80. agent_os/execution_context_policy.py +141 -0
  81. agent_os/github_enterprise.py +96 -0
  82. agent_os/health.py +20 -0
  83. agent_os/integrations/__init__.py +279 -0
  84. agent_os/integrations/a2a_adapter.py +279 -0
  85. agent_os/integrations/agent_lightning/__init__.py +30 -0
  86. agent_os/integrations/anthropic_adapter.py +420 -0
  87. agent_os/integrations/autogen_adapter.py +620 -0
  88. agent_os/integrations/base.py +1137 -0
  89. agent_os/integrations/compat.py +229 -0
  90. agent_os/integrations/config.py +98 -0
  91. agent_os/integrations/conversation_guardian.py +957 -0
  92. agent_os/integrations/crewai_adapter.py +467 -0
  93. agent_os/integrations/drift_detector.py +425 -0
  94. agent_os/integrations/dry_run.py +124 -0
  95. agent_os/integrations/escalation.py +582 -0
  96. agent_os/integrations/gemini_adapter.py +364 -0
  97. agent_os/integrations/google_adk_adapter.py +633 -0
  98. agent_os/integrations/guardrails_adapter.py +394 -0
  99. agent_os/integrations/health.py +197 -0
  100. agent_os/integrations/langchain_adapter.py +654 -0
  101. agent_os/integrations/llamafirewall.py +343 -0
  102. agent_os/integrations/llamaindex_adapter.py +188 -0
  103. agent_os/integrations/logging.py +191 -0
  104. agent_os/integrations/maf_adapter.py +631 -0
  105. agent_os/integrations/mistral_adapter.py +365 -0
  106. agent_os/integrations/openai_adapter.py +816 -0
  107. agent_os/integrations/openai_agents_sdk.py +406 -0
  108. agent_os/integrations/policy_compose.py +171 -0
  109. agent_os/integrations/profiling.py +144 -0
  110. agent_os/integrations/pydantic_ai_adapter.py +420 -0
  111. agent_os/integrations/rate_limiter.py +130 -0
  112. agent_os/integrations/rbac.py +143 -0
  113. agent_os/integrations/registry.py +113 -0
  114. agent_os/integrations/scope_guard.py +303 -0
  115. agent_os/integrations/semantic_kernel_adapter.py +769 -0
  116. agent_os/integrations/smolagents_adapter.py +629 -0
  117. agent_os/integrations/templates.py +178 -0
  118. agent_os/integrations/token_budget.py +134 -0
  119. agent_os/integrations/tool_aliases.py +190 -0
  120. agent_os/integrations/webhooks.py +177 -0
  121. agent_os/lite.py +208 -0
  122. agent_os/mcp_gateway.py +385 -0
  123. agent_os/mcp_message_signer.py +273 -0
  124. agent_os/mcp_protocols.py +161 -0
  125. agent_os/mcp_response_scanner.py +232 -0
  126. agent_os/mcp_security.py +924 -0
  127. agent_os/mcp_session_auth.py +231 -0
  128. agent_os/mcp_sliding_rate_limiter.py +184 -0
  129. agent_os/memory_guard.py +409 -0
  130. agent_os/metrics.py +134 -0
  131. agent_os/mute.py +428 -0
  132. agent_os/mute_agent.py +209 -0
  133. agent_os/policies/__init__.py +77 -0
  134. agent_os/policies/async_evaluator.py +275 -0
  135. agent_os/policies/backends.py +670 -0
  136. agent_os/policies/bridge.py +169 -0
  137. agent_os/policies/budget.py +85 -0
  138. agent_os/policies/cli.py +294 -0
  139. agent_os/policies/conflict_resolution.py +270 -0
  140. agent_os/policies/data_classification.py +252 -0
  141. agent_os/policies/evaluator.py +239 -0
  142. agent_os/policies/policy_schema.json +228 -0
  143. agent_os/policies/rate_limiting.py +145 -0
  144. agent_os/policies/schema.py +115 -0
  145. agent_os/policies/shared.py +331 -0
  146. agent_os/prompt_injection.py +694 -0
  147. agent_os/providers.py +182 -0
  148. agent_os/py.typed +0 -0
  149. agent_os/retry.py +81 -0
  150. agent_os/reversibility.py +251 -0
  151. agent_os/sandbox.py +432 -0
  152. agent_os/sandbox_provider.py +140 -0
  153. agent_os/secure_codegen.py +525 -0
  154. agent_os/security_skills.py +538 -0
  155. agent_os/semantic_policy.py +422 -0
  156. agent_os/server/__init__.py +15 -0
  157. agent_os/server/__main__.py +25 -0
  158. agent_os/server/app.py +277 -0
  159. agent_os/server/models.py +104 -0
  160. agent_os/shift_left_metrics.py +130 -0
  161. agent_os/stateless.py +742 -0
  162. agent_os/supervisor.py +148 -0
  163. agent_os/task_outcome.py +148 -0
  164. agent_os/transparency.py +181 -0
  165. agent_os/trust_root.py +128 -0
  166. agent_os_kernel-3.1.0.dist-info/METADATA +1269 -0
  167. agent_os_kernel-3.1.0.dist-info/RECORD +337 -0
  168. agent_os_kernel-3.1.0.dist-info/WHEEL +4 -0
  169. agent_os_kernel-3.1.0.dist-info/entry_points.txt +2 -0
  170. agent_os_kernel-3.1.0.dist-info/licenses/LICENSE +21 -0
  171. agent_os_observability/__init__.py +27 -0
  172. agent_os_observability/dashboards.py +898 -0
  173. agent_os_observability/metrics.py +398 -0
  174. agent_os_observability/server.py +223 -0
  175. agent_os_observability/tracer.py +232 -0
  176. agent_primitives/__init__.py +24 -0
  177. agent_primitives/failures.py +84 -0
  178. agent_primitives/py.typed +0 -0
  179. amb_core/__init__.py +177 -0
  180. amb_core/adapters/__init__.py +57 -0
  181. amb_core/adapters/aws_sqs_broker.py +376 -0
  182. amb_core/adapters/azure_servicebus_broker.py +340 -0
  183. amb_core/adapters/kafka_broker.py +260 -0
  184. amb_core/adapters/nats_broker.py +285 -0
  185. amb_core/adapters/rabbitmq_broker.py +235 -0
  186. amb_core/adapters/redis_broker.py +262 -0
  187. amb_core/broker.py +145 -0
  188. amb_core/bus.py +481 -0
  189. amb_core/cloudevents.py +509 -0
  190. amb_core/dlq.py +345 -0
  191. amb_core/hf_utils.py +536 -0
  192. amb_core/memory_broker.py +410 -0
  193. amb_core/models.py +141 -0
  194. amb_core/persistence.py +529 -0
  195. amb_core/schema.py +294 -0
  196. amb_core/tracing.py +358 -0
  197. atr/__init__.py +640 -0
  198. atr/access.py +348 -0
  199. atr/composition.py +645 -0
  200. atr/decorator.py +357 -0
  201. atr/executor.py +384 -0
  202. atr/health.py +557 -0
  203. atr/hf_utils.py +449 -0
  204. atr/injection.py +422 -0
  205. atr/metrics.py +440 -0
  206. atr/policies.py +403 -0
  207. atr/py.typed +2 -0
  208. atr/registry.py +452 -0
  209. atr/schema.py +480 -0
  210. atr/tools/safe/__init__.py +75 -0
  211. atr/tools/safe/calculator.py +467 -0
  212. atr/tools/safe/datetime_tool.py +443 -0
  213. atr/tools/safe/file_reader.py +402 -0
  214. atr/tools/safe/http_client.py +316 -0
  215. atr/tools/safe/json_parser.py +374 -0
  216. atr/tools/safe/text_tool.py +537 -0
  217. atr/tools/safe/toolkit.py +175 -0
  218. caas/__init__.py +162 -0
  219. caas/api/__init__.py +7 -0
  220. caas/api/server.py +1328 -0
  221. caas/caching.py +834 -0
  222. caas/cli.py +210 -0
  223. caas/conversation.py +223 -0
  224. caas/decay.py +72 -0
  225. caas/detection/__init__.py +9 -0
  226. caas/detection/detector.py +238 -0
  227. caas/enrichment.py +130 -0
  228. caas/gateway/__init__.py +27 -0
  229. caas/gateway/trust_gateway.py +474 -0
  230. caas/hf_utils.py +479 -0
  231. caas/ingestion/__init__.py +23 -0
  232. caas/ingestion/processors.py +253 -0
  233. caas/ingestion/structure_parser.py +188 -0
  234. caas/models.py +356 -0
  235. caas/pragmatic_truth.py +444 -0
  236. caas/routing/__init__.py +10 -0
  237. caas/routing/heuristic_router.py +58 -0
  238. caas/storage/__init__.py +9 -0
  239. caas/storage/store.py +389 -0
  240. caas/triad.py +213 -0
  241. caas/tuning/__init__.py +9 -0
  242. caas/tuning/tuner.py +329 -0
  243. caas/vfs/__init__.py +14 -0
  244. caas/vfs/filesystem.py +452 -0
  245. cmvk/__init__.py +218 -0
  246. cmvk/audit.py +402 -0
  247. cmvk/benchmarks.py +478 -0
  248. cmvk/constitutional.py +904 -0
  249. cmvk/hf_utils.py +301 -0
  250. cmvk/metrics.py +473 -0
  251. cmvk/profiles.py +300 -0
  252. cmvk/py.typed +0 -0
  253. cmvk/types.py +12 -0
  254. cmvk/verification.py +956 -0
  255. emk/__init__.py +89 -0
  256. emk/causal.py +352 -0
  257. emk/hf_utils.py +421 -0
  258. emk/indexer.py +83 -0
  259. emk/py.typed +0 -0
  260. emk/schema.py +204 -0
  261. emk/sleep_cycle.py +347 -0
  262. emk/store.py +281 -0
  263. iatp/__init__.py +166 -0
  264. iatp/attestation.py +461 -0
  265. iatp/cli.py +317 -0
  266. iatp/hf_utils.py +472 -0
  267. iatp/ipc_pipes.py +580 -0
  268. iatp/main.py +412 -0
  269. iatp/models/__init__.py +447 -0
  270. iatp/policy_engine.py +337 -0
  271. iatp/py.typed +2 -0
  272. iatp/recovery.py +321 -0
  273. iatp/security/__init__.py +270 -0
  274. iatp/sidecar/__init__.py +519 -0
  275. iatp/telemetry/__init__.py +164 -0
  276. iatp/tests/__init__.py +1 -0
  277. iatp/tests/test_attestation.py +370 -0
  278. iatp/tests/test_cli.py +131 -0
  279. iatp/tests/test_ed25519_attestation.py +211 -0
  280. iatp/tests/test_models.py +130 -0
  281. iatp/tests/test_policy_engine.py +347 -0
  282. iatp/tests/test_recovery.py +281 -0
  283. iatp/tests/test_security.py +222 -0
  284. iatp/tests/test_sidecar.py +167 -0
  285. iatp/tests/test_telemetry.py +175 -0
  286. mcp_kernel_server/__init__.py +28 -0
  287. mcp_kernel_server/cli.py +274 -0
  288. mcp_kernel_server/resources.py +217 -0
  289. mcp_kernel_server/server.py +564 -0
  290. mcp_kernel_server/tools.py +1174 -0
  291. mute_agent/__init__.py +68 -0
  292. mute_agent/core/__init__.py +1 -0
  293. mute_agent/core/execution_agent.py +166 -0
  294. mute_agent/core/handshake_protocol.py +201 -0
  295. mute_agent/core/reasoning_agent.py +238 -0
  296. mute_agent/knowledge_graph/__init__.py +1 -0
  297. mute_agent/knowledge_graph/graph_elements.py +65 -0
  298. mute_agent/knowledge_graph/multidimensional_graph.py +170 -0
  299. mute_agent/knowledge_graph/subgraph.py +224 -0
  300. mute_agent/listener/__init__.py +43 -0
  301. mute_agent/listener/adapters/__init__.py +31 -0
  302. mute_agent/listener/adapters/base_adapter.py +189 -0
  303. mute_agent/listener/adapters/caas_adapter.py +344 -0
  304. mute_agent/listener/adapters/control_plane_adapter.py +436 -0
  305. mute_agent/listener/adapters/iatp_adapter.py +332 -0
  306. mute_agent/listener/adapters/scak_adapter.py +251 -0
  307. mute_agent/listener/listener.py +610 -0
  308. mute_agent/listener/state_observer.py +436 -0
  309. mute_agent/listener/threshold_config.py +313 -0
  310. mute_agent/super_system/__init__.py +1 -0
  311. mute_agent/super_system/router.py +204 -0
  312. mute_agent/visualization/__init__.py +10 -0
  313. mute_agent/visualization/graph_debugger.py +502 -0
  314. nexus/README.md +60 -0
  315. nexus/__init__.py +51 -0
  316. nexus/arbiter.py +359 -0
  317. nexus/client.py +466 -0
  318. nexus/dmz.py +444 -0
  319. nexus/escrow.py +430 -0
  320. nexus/exceptions.py +286 -0
  321. nexus/pyproject.toml +36 -0
  322. nexus/registry.py +393 -0
  323. nexus/reputation.py +425 -0
  324. nexus/schemas/__init__.py +51 -0
  325. nexus/schemas/compliance.py +276 -0
  326. nexus/schemas/escrow.py +251 -0
  327. nexus/schemas/manifest.py +225 -0
  328. nexus/schemas/receipt.py +208 -0
  329. nexus/tests/__init__.py +0 -0
  330. nexus/tests/conftest.py +146 -0
  331. nexus/tests/test_arbiter.py +192 -0
  332. nexus/tests/test_dmz.py +194 -0
  333. nexus/tests/test_escrow.py +276 -0
  334. nexus/tests/test_exceptions.py +225 -0
  335. nexus/tests/test_registry.py +232 -0
  336. nexus/tests/test_reputation.py +328 -0
  337. nexus/tests/test_schemas.py +295 -0
@@ -0,0 +1,564 @@
1
+ # Copyright (c) Microsoft Corporation.
2
+ # Licensed under the MIT License.
3
+ """
4
+ MCP Kernel Server - Main server implementation.
5
+
6
+ Exposes Agent OS primitives through Model Context Protocol:
7
+ - Tools: cmvk_verify, kernel_execute, iatp_sign, iatp_verify, iatp_reputation
8
+ - Resources: VFS filesystem, audit logs
9
+ - Prompts: Standard agent instructions
10
+
11
+ AAIF Compliance:
12
+ - Stateless: All context in request, no session state
13
+ - MCP June 2026: Full protocol compliance
14
+ - Claude Desktop: Zero-config integration via stdio
15
+
16
+ Usage:
17
+ # Stdio mode (for Claude Desktop)
18
+ mcp-kernel-server --stdio
19
+
20
+ # HTTP mode (for development)
21
+ mcp-kernel-server --http --port 8080
22
+ """
23
+
24
+ import asyncio
25
+ import json
26
+ import logging
27
+ import sys
28
+ from typing import Any, Optional
29
+ from dataclasses import dataclass, asdict
30
+
31
+ from mcp_kernel_server.tools import (
32
+ CMVKVerifyTool,
33
+ KernelExecuteTool,
34
+ IATPSignTool,
35
+ IATPVerifyTool,
36
+ IATPReputationTool,
37
+ VerifyCodeSafetyTool,
38
+ CMVKReviewCodeTool,
39
+ GetAuditLogTool,
40
+ ToolResult,
41
+ )
42
+ from mcp_kernel_server.resources import VFSResource, VFSResourceTemplate
43
+
44
+ logger = logging.getLogger(__name__)
45
+
46
+
47
+ @dataclass
48
+ class ServerConfig:
49
+ """Server configuration."""
50
+ host: str = "0.0.0.0"
51
+ port: int = 8080
52
+ policy_mode: str = "strict"
53
+ cmvk_threshold: float = 0.85
54
+ vfs_backend: str = "memory"
55
+
56
+
57
+ # =============================================================================
58
+ # MCP Prompts - Standard Agent Instructions
59
+ # =============================================================================
60
+
61
+ PROMPTS = {
62
+ "governed_agent": {
63
+ "name": "governed_agent",
64
+ "description": "Instructions for operating as a governed agent under Agent OS",
65
+ "arguments": [
66
+ {
67
+ "name": "agent_id",
68
+ "description": "Unique identifier for this agent",
69
+ "required": True
70
+ },
71
+ {
72
+ "name": "policies",
73
+ "description": "Comma-separated list of policies to enforce",
74
+ "required": False
75
+ }
76
+ ],
77
+ "template": """You are operating as a governed agent under Agent OS.
78
+
79
+ Agent ID: {agent_id}
80
+ Active Policies: {policies}
81
+
82
+ IMPORTANT RULES:
83
+ 1. Before executing any action, use the kernel_execute tool
84
+ 2. The kernel will check your action against active policies
85
+ 3. If the kernel returns a SIGKILL, stop immediately
86
+ 4. All actions are logged to the audit trail
87
+
88
+ Available Tools:
89
+ - kernel_execute: Execute actions with policy enforcement
90
+ - cmvk_verify: Verify claims across multiple models
91
+ - iatp_sign: Sign trust attestations for other agents
92
+ - iatp_verify: Verify trust relationships
93
+ - iatp_reputation: Query agent reputation network
94
+
95
+ Example usage:
96
+ ```
97
+ Use kernel_execute with:
98
+ - action: "database_query"
99
+ - params: {"query": "SELECT * FROM users WHERE id = 1"}
100
+ - agent_id: "{agent_id}"
101
+ - policies: [{policies}]
102
+ ```
103
+ """
104
+ },
105
+ "verify_claim": {
106
+ "name": "verify_claim",
107
+ "description": "Instructions for verifying a claim using CMVK",
108
+ "arguments": [
109
+ {
110
+ "name": "claim",
111
+ "description": "The claim to verify",
112
+ "required": True
113
+ }
114
+ ],
115
+ "template": """Verify the following claim using CMVK verification:
116
+
117
+ Claim: {claim}
118
+
119
+ Use the cmvk_verify tool to check this claim across multiple AI models.
120
+ This helps detect hallucinations and ensures accuracy.
121
+
122
+ The tool will return:
123
+ - verified: Whether models agree on the claim
124
+ - confidence: Agreement score (0-1)
125
+ - drift_score: Measure of disagreement between models
126
+
127
+ If drift_score > 0.15, the models significantly disagree and the claim needs review.
128
+ """
129
+ },
130
+ "safe_execution": {
131
+ "name": "safe_execution",
132
+ "description": "Template for executing actions safely through the kernel",
133
+ "arguments": [
134
+ {
135
+ "name": "action",
136
+ "description": "The action to execute",
137
+ "required": True
138
+ },
139
+ {
140
+ "name": "params",
141
+ "description": "JSON parameters for the action",
142
+ "required": True
143
+ }
144
+ ],
145
+ "template": """Execute the following action through the Agent OS kernel:
146
+
147
+ Action: {action}
148
+ Parameters: {params}
149
+
150
+ Use kernel_execute tool with these values. The kernel will:
151
+ 1. Check the action against active policies
152
+ 2. Log the action to the audit trail
153
+ 3. Execute if allowed, or return SIGKILL if blocked
154
+
155
+ If you receive a SIGKILL signal, do NOT retry the action.
156
+ Explain to the user why the action was blocked.
157
+ """
158
+ }
159
+ }
160
+
161
+
162
+ class KernelMCPServer:
163
+ """
164
+ MCP Server exposing Agent OS kernel primitives.
165
+
166
+ Stateless Design (MCP June 2026 Standard):
167
+ - No session state maintained
168
+ - All context passed in each request
169
+ - State externalized to backend storage
170
+ - Horizontally scalable
171
+
172
+ Tools (8 total):
173
+ - verify_code_safety: Check code safety before execution
174
+ - cmvk_verify: Cross-model claim verification
175
+ - cmvk_review: Multi-model code review
176
+ - kernel_execute: Governed action execution
177
+ - iatp_sign: Trust attestation signing
178
+ - iatp_verify: Trust relationship verification
179
+ - iatp_reputation: Reputation query/slashing
180
+ - get_audit_log: Retrieve audit trail
181
+
182
+ Resources:
183
+ - vfs://{agent_id}/mem/* - Agent memory
184
+ - vfs://{agent_id}/policy/* - Agent policies
185
+ - audit://{agent_id}/log - Audit trail (read-only)
186
+
187
+ Prompts:
188
+ - governed_agent: Standard governed agent instructions
189
+ - verify_claim: CMVK verification template
190
+ - safe_execution: Safe action execution template
191
+ """
192
+
193
+ SERVER_NAME = "agent-os-kernel"
194
+ SERVER_VERSION = "1.2.0"
195
+ PROTOCOL_VERSION = "2024-11-05"
196
+
197
+ def __init__(self, config: Optional[ServerConfig] = None):
198
+ self.config = config or ServerConfig()
199
+
200
+ # Initialize tools (stateless)
201
+ self.tools = {
202
+ "verify_code_safety": VerifyCodeSafetyTool(),
203
+ "cmvk_verify": CMVKVerifyTool({"threshold": self.config.cmvk_threshold}),
204
+ "cmvk_review": CMVKReviewCodeTool(),
205
+ "kernel_execute": KernelExecuteTool({"policy_mode": self.config.policy_mode}),
206
+ "iatp_sign": IATPSignTool(),
207
+ "iatp_verify": IATPVerifyTool(),
208
+ "iatp_reputation": IATPReputationTool(),
209
+ "get_audit_log": GetAuditLogTool(),
210
+ }
211
+
212
+ # Initialize resources (stateless with external backend)
213
+ self.vfs = VFSResource({"backend": self.config.vfs_backend})
214
+
215
+ # Prompts (static)
216
+ self.prompts = PROMPTS
217
+
218
+ # =========================================================================
219
+ # MCP Protocol Handlers
220
+ # =========================================================================
221
+
222
+ async def handle_initialize(self, params: dict) -> dict:
223
+ """Handle MCP initialize request."""
224
+ return {
225
+ "protocolVersion": self.PROTOCOL_VERSION,
226
+ "capabilities": {
227
+ "tools": {"listChanged": False},
228
+ "resources": {"subscribe": False, "listChanged": False},
229
+ "prompts": {"listChanged": False},
230
+ },
231
+ "serverInfo": {
232
+ "name": self.SERVER_NAME,
233
+ "version": self.SERVER_VERSION
234
+ }
235
+ }
236
+
237
+ async def handle_list_tools(self) -> dict:
238
+ """Handle MCP tools/list request."""
239
+ return {
240
+ "tools": [
241
+ {
242
+ "name": tool.name,
243
+ "description": tool.description,
244
+ "inputSchema": tool.input_schema
245
+ }
246
+ for tool in self.tools.values()
247
+ ]
248
+ }
249
+
250
+ async def handle_call_tool(self, name: str, arguments: dict) -> dict:
251
+ """Handle MCP tools/call request."""
252
+ if name not in self.tools:
253
+ return {
254
+ "isError": True,
255
+ "content": [{"type": "text", "text": f"Unknown tool: {name}"}]
256
+ }
257
+
258
+ tool = self.tools[name]
259
+
260
+ try:
261
+ result = await tool.execute(arguments)
262
+
263
+ if result.success:
264
+ return {
265
+ "content": [
266
+ {
267
+ "type": "text",
268
+ "text": json.dumps(result.data, indent=2)
269
+ }
270
+ ],
271
+ "isError": False
272
+ }
273
+ else:
274
+ return {
275
+ "content": [
276
+ {
277
+ "type": "text",
278
+ "text": result.error or "Execution failed"
279
+ }
280
+ ],
281
+ "isError": True
282
+ }
283
+ except Exception as e:
284
+ logger.exception(f"Tool execution failed: {name}")
285
+ return {
286
+ "isError": True,
287
+ "content": [{"type": "text", "text": str(e)}]
288
+ }
289
+
290
+ async def handle_list_resources(self) -> dict:
291
+ """Handle MCP resources/list request."""
292
+ return {
293
+ "resources": [
294
+ {
295
+ "uri": "vfs://",
296
+ "name": "Agent VFS Root",
297
+ "description": "Virtual File System for agent memory",
298
+ "mimeType": "application/json"
299
+ },
300
+ {
301
+ "uri": "audit://",
302
+ "name": "Audit Log",
303
+ "description": "Immutable audit trail of agent actions",
304
+ "mimeType": "application/json"
305
+ }
306
+ ]
307
+ }
308
+
309
+ async def handle_list_resource_templates(self) -> dict:
310
+ """Handle MCP resources/templates/list request."""
311
+ templates = VFSResourceTemplate.get_templates()
312
+ templates.append({
313
+ "uriTemplate": "audit://{agent_id}/log",
314
+ "name": "Agent Audit Log",
315
+ "description": "Read-only audit trail for agent",
316
+ "mimeType": "application/json"
317
+ })
318
+ return {"resourceTemplates": templates}
319
+
320
+ async def handle_read_resource(self, uri: str) -> dict:
321
+ """Handle MCP resources/read request."""
322
+ try:
323
+ if uri.startswith("audit://"):
324
+ result = await self._read_audit(uri)
325
+ else:
326
+ result = await self.vfs.read(uri)
327
+
328
+ return {
329
+ "contents": [
330
+ {
331
+ "uri": result.uri,
332
+ "mimeType": result.mime_type,
333
+ "text": json.dumps(result.content, indent=2)
334
+ }
335
+ ]
336
+ }
337
+ except Exception as e:
338
+ logger.exception(f"Resource read failed: {uri}")
339
+ return {
340
+ "contents": [
341
+ {
342
+ "uri": uri,
343
+ "mimeType": "text/plain",
344
+ "text": f"Error: {str(e)}"
345
+ }
346
+ ]
347
+ }
348
+
349
+ async def _read_audit(self, uri: str) -> Any:
350
+ """Read from audit log."""
351
+ from mcp_kernel_server.resources import ResourceContent
352
+
353
+ # Parse audit://agent_id/log
354
+ parts = uri.replace("audit://", "").split("/")
355
+ agent_id = parts[0] if parts else "unknown"
356
+
357
+ # Return audit entries (in production, from external store)
358
+ return ResourceContent(
359
+ uri=uri,
360
+ mime_type="application/json",
361
+ content={
362
+ "agent_id": agent_id,
363
+ "entries": [], # Would be populated from audit backend
364
+ "note": "Audit log is append-only and immutable"
365
+ }
366
+ )
367
+
368
+ # =========================================================================
369
+ # MCP Prompts Handlers
370
+ # =========================================================================
371
+
372
+ async def handle_list_prompts(self) -> dict:
373
+ """Handle MCP prompts/list request."""
374
+ return {
375
+ "prompts": [
376
+ {
377
+ "name": p["name"],
378
+ "description": p["description"],
379
+ "arguments": p.get("arguments", [])
380
+ }
381
+ for p in self.prompts.values()
382
+ ]
383
+ }
384
+
385
+ async def handle_get_prompt(self, name: str, arguments: dict) -> dict:
386
+ """Handle MCP prompts/get request."""
387
+ if name not in self.prompts:
388
+ return {
389
+ "isError": True,
390
+ "description": f"Unknown prompt: {name}"
391
+ }
392
+
393
+ prompt = self.prompts[name]
394
+
395
+ # Fill in template with arguments
396
+ template = prompt["template"]
397
+ for arg in prompt.get("arguments", []):
398
+ arg_name = arg["name"]
399
+ arg_value = arguments.get(arg_name, "")
400
+ template = template.replace(f"{{{arg_name}}}", str(arg_value))
401
+
402
+ return {
403
+ "description": prompt["description"],
404
+ "messages": [
405
+ {
406
+ "role": "user",
407
+ "content": {
408
+ "type": "text",
409
+ "text": template
410
+ }
411
+ }
412
+ ]
413
+ }
414
+
415
+ # =========================================================================
416
+ # Stdio Transport (for Claude Desktop)
417
+ # =========================================================================
418
+
419
+ async def run_stdio(self):
420
+ """
421
+ Run server in stdio mode for Claude Desktop integration.
422
+
423
+ Protocol: JSON-RPC 2.0 over stdin/stdout
424
+ Each message is newline-delimited JSON
425
+ """
426
+ logger.info("Starting MCP Kernel Server in stdio mode")
427
+
428
+ reader = asyncio.StreamReader()
429
+ protocol = asyncio.StreamReaderProtocol(reader)
430
+ await asyncio.get_event_loop().connect_read_pipe(lambda: protocol, sys.stdin)
431
+
432
+ writer_transport, writer_protocol = await asyncio.get_event_loop().connect_write_pipe(
433
+ asyncio.streams.FlowControlMixin, sys.stdout
434
+ )
435
+ writer = asyncio.StreamWriter(writer_transport, writer_protocol, reader, asyncio.get_event_loop())
436
+
437
+ while True:
438
+ try:
439
+ line = await reader.readline()
440
+ if not line:
441
+ break
442
+
443
+ request = json.loads(line.decode())
444
+ response = await self._handle_jsonrpc(request)
445
+
446
+ writer.write((json.dumps(response) + "\n").encode())
447
+ await writer.drain()
448
+
449
+ except Exception as e:
450
+ logger.exception("Stdio handler error")
451
+ error_response = {
452
+ "jsonrpc": "2.0",
453
+ "error": {"code": -32603, "message": str(e)},
454
+ "id": None
455
+ }
456
+ writer.write((json.dumps(error_response) + "\n").encode())
457
+ await writer.drain()
458
+
459
+ async def _handle_jsonrpc(self, request: dict) -> dict:
460
+ """Handle JSON-RPC request."""
461
+ method = request.get("method", "")
462
+ params = request.get("params", {})
463
+ request_id = request.get("id")
464
+
465
+ try:
466
+ if method == "initialize":
467
+ result = await self.handle_initialize(params)
468
+ elif method == "tools/list":
469
+ result = await self.handle_list_tools()
470
+ elif method == "tools/call":
471
+ result = await self.handle_call_tool(params.get("name"), params.get("arguments", {}))
472
+ elif method == "resources/list":
473
+ result = await self.handle_list_resources()
474
+ elif method == "resources/templates/list":
475
+ result = await self.handle_list_resource_templates()
476
+ elif method == "resources/read":
477
+ result = await self.handle_read_resource(params.get("uri", ""))
478
+ elif method == "prompts/list":
479
+ result = await self.handle_list_prompts()
480
+ elif method == "prompts/get":
481
+ result = await self.handle_get_prompt(params.get("name"), params.get("arguments", {}))
482
+ else:
483
+ return {
484
+ "jsonrpc": "2.0",
485
+ "error": {"code": -32601, "message": f"Unknown method: {method}"},
486
+ "id": request_id
487
+ }
488
+
489
+ return {
490
+ "jsonrpc": "2.0",
491
+ "result": result,
492
+ "id": request_id
493
+ }
494
+
495
+ except Exception as e:
496
+ logger.exception(f"Method {method} failed")
497
+ return {
498
+ "jsonrpc": "2.0",
499
+ "error": {"code": -32603, "message": str(e)},
500
+ "id": request_id
501
+ }
502
+
503
+ # =========================================================================
504
+ # Server Lifecycle
505
+ # =========================================================================
506
+
507
+ async def start(self):
508
+ """Start the MCP server."""
509
+ logger.info(f"Starting MCP Kernel Server on {self.config.host}:{self.config.port}")
510
+
511
+ async def stop(self):
512
+ """Stop the MCP server."""
513
+ logger.info("Stopping MCP Kernel Server")
514
+
515
+
516
+ # =========================================================================
517
+ # Stateless Execution Helper (for direct integration)
518
+ # =========================================================================
519
+
520
+ async def stateless_execute(
521
+ action: str,
522
+ params: dict,
523
+ context: dict,
524
+ config: Optional[dict] = None
525
+ ) -> dict:
526
+ """
527
+ Execute an action through the kernel statelessly.
528
+
529
+ This is the core stateless API for June 2026 MCP compliance:
530
+ - All context passed in request
531
+ - No session state maintained
532
+ - Can run on any server instance
533
+
534
+ Args:
535
+ action: Action to execute (e.g., "database_query")
536
+ params: Action parameters
537
+ context: Full execution context including:
538
+ - agent_id: Identifier for the agent
539
+ - policies: List of policy names to enforce
540
+ - history: Previous interactions (optional)
541
+ - state: External state reference (optional)
542
+ config: Optional server configuration
543
+
544
+ Returns:
545
+ Execution result with success status and data
546
+ """
547
+ server = KernelMCPServer(ServerConfig(**(config or {})))
548
+
549
+ tool_args = {
550
+ "action": action,
551
+ "params": params,
552
+ "agent_id": context.get("agent_id", "anonymous"),
553
+ "policies": context.get("policies", []),
554
+ "context": context
555
+ }
556
+
557
+ result = await server.tools["kernel_execute"].execute(tool_args)
558
+
559
+ return {
560
+ "success": result.success,
561
+ "data": result.data,
562
+ "error": result.error,
563
+ "metadata": result.metadata
564
+ }