microsoft-agent 2.3.8__tar.gz → 2.4.0__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.
Files changed (219) hide show
  1. {microsoft_agent-2.3.8/microsoft_agent.egg-info → microsoft_agent-2.4.0}/PKG-INFO +7 -11
  2. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/README.md +4 -8
  3. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/docs/authentication.md +3 -3
  4. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/docs/integrations.md +2 -1
  5. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/docs/office-addin.md +2 -2
  6. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/docs/usage.md +2 -2
  7. microsoft_agent-2.4.0/microsoft_agent/__init__.py +28 -0
  8. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/api/api_client_admin.py +6 -0
  9. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/api/api_client_base.py +4 -3
  10. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/api/api_client_directory.py +2 -0
  11. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/api/api_client_drive.py +3 -0
  12. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/api/api_client_other.py +7 -0
  13. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/config_cli.py +0 -1
  14. microsoft_agent-2.4.0/microsoft_agent/connector_contracts.py +5370 -0
  15. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/integration_tools.py +59 -16
  16. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/intune_service.py +0 -6
  17. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/mcp_config.json +0 -1
  18. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/mcp_server.py +23 -123
  19. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/office_bridge.py +12 -1
  20. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/ontology/certification.json +3 -3
  21. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/ontology/microsoft.ttl +7 -3
  22. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/ontology/shapes/connector.shacl.ttl +2 -2
  23. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/power_platform.py +2 -2
  24. microsoft_agent-2.4.0/microsoft_agent/prompts/microsoft-agent-operator.json +441 -0
  25. microsoft_agent-2.4.0/microsoft_agent/prompts/microsoft-collaboration-manager.json +139 -0
  26. microsoft_agent-2.4.0/microsoft_agent/prompts/microsoft-document-author.json +82 -0
  27. microsoft_agent-2.4.0/microsoft_agent/prompts/microsoft-endpoint-engineer.json +107 -0
  28. microsoft_agent-2.4.0/microsoft_agent/prompts/microsoft-identity-administrator.json +151 -0
  29. microsoft_agent-2.4.0/microsoft_agent/prompts/microsoft-mailbox-coordinator.json +113 -0
  30. microsoft_agent-2.4.0/microsoft_agent/prompts/microsoft-security-analyst.json +87 -0
  31. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/settings.py +0 -4
  32. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/skills/microsoft-agent-development/SKILL.md +4 -4
  33. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/skills/microsoft-agent-operations/SKILL.md +9 -3
  34. microsoft_agent-2.4.0/microsoft_agent/skills/microsoft-calendar-scheduling/SKILL.md +72 -0
  35. microsoft_agent-2.4.0/microsoft_agent/skills/microsoft-contacts/SKILL.md +45 -0
  36. microsoft_agent-2.4.0/microsoft_agent/skills/microsoft-document-authoring/SKILL.md +60 -0
  37. microsoft_agent-2.4.0/microsoft_agent/skills/microsoft-education-booking/SKILL.md +59 -0
  38. microsoft_agent-2.4.0/microsoft_agent/skills/microsoft-endpoint-management/SKILL.md +67 -0
  39. microsoft_agent-2.4.0/microsoft_agent/skills/microsoft-files-sharepoint/SKILL.md +79 -0
  40. microsoft_agent-2.4.0/microsoft_agent/skills/microsoft-graph-integration/SKILL.md +58 -0
  41. microsoft_agent-2.4.0/microsoft_agent/skills/microsoft-identity-directory/SKILL.md +140 -0
  42. microsoft_agent-2.4.0/microsoft_agent/skills/microsoft-mail-operations/SKILL.md +70 -0
  43. microsoft_agent-2.4.0/microsoft_agent/skills/microsoft-office-apps/SKILL.md +77 -0
  44. microsoft_agent-2.4.0/microsoft_agent/skills/microsoft-power-platform/SKILL.md +55 -0
  45. microsoft_agent-2.4.0/microsoft_agent/skills/microsoft-security-operations/SKILL.md +78 -0
  46. microsoft_agent-2.4.0/microsoft_agent/skills/microsoft-service-reports/SKILL.md +51 -0
  47. microsoft_agent-2.4.0/microsoft_agent/skills/microsoft-session-management/SKILL.md +51 -0
  48. microsoft_agent-2.4.0/microsoft_agent/skills/microsoft-teams-messaging/SKILL.md +74 -0
  49. microsoft_agent-2.4.0/microsoft_agent/skills/microsoft-universal-print/SKILL.md +51 -0
  50. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/tool_policy.py +6 -29
  51. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/windows_companion.py +2 -2
  52. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0/microsoft_agent.egg-info}/PKG-INFO +7 -11
  53. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent.egg-info/SOURCES.txt +22 -39
  54. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent.egg-info/requires.txt +2 -2
  55. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/pyproject.toml +3 -3
  56. microsoft_agent-2.4.0/tests/test_destructive_declaration.py +83 -0
  57. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/tests/test_graph_reliability.py +14 -64
  58. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/tests/test_graph_transport.py +3 -3
  59. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/tests/test_intune_service.py +2 -19
  60. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/tests/test_mcp_comprehensive.py +0 -63
  61. microsoft_agent-2.4.0/tests/test_mcp_server.py +64 -0
  62. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/tests/test_onenote_sharepoint_print.py +11 -17
  63. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/tests/test_sdk_centralization.py +2 -2
  64. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/tests/test_settings_and_policy.py +33 -10
  65. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/tests/test_transport_migration.py +2 -2
  66. microsoft_agent-2.3.8/microsoft_agent/__init__.py +0 -24
  67. microsoft_agent-2.3.8/microsoft_agent/mcp/__init__.py +0 -83
  68. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_admin.py +0 -59
  69. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_agreements.py +0 -63
  70. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_applications.py +0 -63
  71. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_audit.py +0 -54
  72. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_auth.py +0 -56
  73. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_calendar.py +0 -62
  74. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_chat.py +0 -50
  75. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_communications.py +0 -61
  76. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_connections.py +0 -69
  77. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_contacts.py +0 -61
  78. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_devices.py +0 -58
  79. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_directory.py +0 -61
  80. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_domains.py +0 -55
  81. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_education.py +0 -55
  82. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_employee_experience.py +0 -62
  83. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_files.py +0 -84
  84. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_groups.py +0 -60
  85. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_identity.py +0 -59
  86. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_mail.py +0 -77
  87. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_meta.py +0 -50
  88. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_notes.py +0 -52
  89. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_organization.py +0 -56
  90. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_places.py +0 -56
  91. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_policies.py +0 -54
  92. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_print.py +0 -57
  93. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_privacy.py +0 -64
  94. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_reports.py +0 -55
  95. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_search.py +0 -52
  96. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_security.py +0 -66
  97. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_sites.py +0 -65
  98. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_solutions.py +0 -54
  99. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_storage.py +0 -64
  100. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_subscriptions.py +0 -56
  101. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_tasks.py +0 -58
  102. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_teams.py +0 -52
  103. microsoft_agent-2.3.8/microsoft_agent/mcp/mcp_user.py +0 -48
  104. microsoft_agent-2.3.8/microsoft_agent/prompts/collaboration_specialist.json +0 -36
  105. microsoft_agent-2.3.8/microsoft_agent/skills/microsoft-calendar-scheduling/SKILL.md +0 -81
  106. microsoft_agent-2.3.8/microsoft_agent/skills/microsoft-mail-operations/SKILL.md +0 -92
  107. microsoft_agent-2.3.8/microsoft_agent/skills/microsoft-teams-messaging/SKILL.md +0 -82
  108. microsoft_agent-2.3.8/tests/test_bug_cx_046_ctx_info_awaited.py +0 -48
  109. microsoft_agent-2.3.8/tests/test_mcp_server.py +0 -93
  110. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/LICENSE +0 -0
  111. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/MANIFEST.in +0 -0
  112. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/deployment/control-plane/README.md +0 -0
  113. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/deployment/control-plane/control-plane.sample.json +0 -0
  114. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/deployment/control-plane/nginx/windows-control-plane.conf +0 -0
  115. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/deployment/control-plane/systemd/microsoft-windows-control-plane.env +0 -0
  116. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/deployment/control-plane/systemd/microsoft-windows-control-plane.service +0 -0
  117. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/deployment/entra/New-MicrosoftAgentApp.ps1 +0 -0
  118. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/deployment/entra/New-WindowsControlPlaneEntraResources.ps1 +0 -0
  119. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/deployment/entra/README.md +0 -0
  120. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/deployment/entra/permission-profiles.json +0 -0
  121. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/deployment/integrations.example.json +0 -0
  122. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/deployment/windows/Install-WindowsCompanion.ps1 +0 -0
  123. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/deployment/windows/README.md +0 -0
  124. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/deployment/windows/Run-WindowsCompanion.ps1 +0 -0
  125. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/deployment/windows/Test-WindowsCompanionDeployment.ps1 +0 -0
  126. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/deployment/windows/Uninstall-WindowsCompanion.ps1 +0 -0
  127. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/deployment/windows/windows-companion.sample.json +0 -0
  128. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/docs/concepts.md +0 -0
  129. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/docs/configuration.md +0 -0
  130. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/docs/deployment.md +0 -0
  131. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/docs/enrollment-checklist.md +0 -0
  132. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/docs/index.md +0 -0
  133. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/docs/installation.md +0 -0
  134. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/docs/overview.md +0 -0
  135. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/docs/windows-companion.md +0 -0
  136. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/__main__.py +0 -0
  137. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/_version.py +0 -0
  138. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/api/__init__.py +0 -0
  139. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/api/_graph_models.py +0 -0
  140. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/api/api_client_apps.py +0 -0
  141. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/api/api_client_calendar.py +0 -0
  142. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/api/api_client_mail.py +0 -0
  143. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/api/api_client_system.py +0 -0
  144. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/api_client.py +0 -0
  145. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/auth.py +0 -0
  146. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/connector_sources.py +0 -0
  147. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/connectors/__init__.py +0 -0
  148. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/credential_adapter.py +0 -0
  149. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/document_service.py +0 -0
  150. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/graph_file_service.py +0 -0
  151. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/integration_adapters.py +0 -0
  152. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/integration_auth.py +0 -0
  153. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/integration_config.py +0 -0
  154. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/kg_ingest.py +0 -0
  155. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/ontology/__init__.py +0 -0
  156. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/ontology/fixtures/records.json +0 -0
  157. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/ontology/mappings/source.yaml +0 -0
  158. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/ontology/migrations/manifest.json +0 -0
  159. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/prompts/__init__.py +0 -0
  160. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/skills/__init__.py +0 -0
  161. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/skills/microsoft-agent-operations/agents/openai.yaml +0 -0
  162. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/skills/microsoft-agent-operations/references/catalog.md +0 -0
  163. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/universal_print.py +0 -0
  164. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/windows_companion_service.py +0 -0
  165. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/windows_control_plane.py +0 -0
  166. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/windows_control_plane_service.py +0 -0
  167. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent/windows_runtime.py +0 -0
  168. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent.egg-info/dependency_links.txt +0 -0
  169. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent.egg-info/entry_points.txt +0 -0
  170. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/microsoft_agent.egg-info/top_level.txt +0 -0
  171. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/office_addin/README.md +0 -0
  172. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/office_addin/manifest.xml +0 -0
  173. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/office_addin/package-lock.json +0 -0
  174. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/office_addin/package.json +0 -0
  175. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/office_addin/public/assets/icon.png.b64 +0 -0
  176. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/office_addin/public/assets/icon.svg +0 -0
  177. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/office_addin/public/config.json +0 -0
  178. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/office_addin/public/styles.css +0 -0
  179. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/office_addin/public/taskpane.html +0 -0
  180. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/office_addin/scripts/validate_manifest.py +0 -0
  181. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/office_addin/src/backend-client.ts +0 -0
  182. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/office_addin/src/office-bridge.ts +0 -0
  183. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/office_addin/src/office-operations.ts +0 -0
  184. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/office_addin/src/taskpane.ts +0 -0
  185. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/office_addin/src/validation.ts +0 -0
  186. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/office_addin/tests/backend-client.test.ts +0 -0
  187. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/office_addin/tests/office-bridge.test.ts +0 -0
  188. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/office_addin/tests/validation.test.ts +0 -0
  189. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/office_addin/tsconfig.json +0 -0
  190. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/office_addin/vitest.config.ts +0 -0
  191. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/office_addin/webpack.config.cjs +0 -0
  192. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/setup.cfg +0 -0
  193. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/tests/test_api_client_extended.py +0 -0
  194. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/tests/test_auth.py +0 -0
  195. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/tests/test_auth_coverage.py +0 -0
  196. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/tests/test_config_cli.py +0 -0
  197. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/tests/test_credential_adapter.py +0 -0
  198. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/tests/test_default_content_surfaces.py +0 -0
  199. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/tests/test_document_service.py +0 -0
  200. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/tests/test_generate_code.py +0 -0
  201. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/tests/test_graph_file_service.py +0 -0
  202. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/tests/test_init_dynamics.py +0 -0
  203. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/tests/test_integration_adapters.py +0 -0
  204. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/tests/test_integration_auth.py +0 -0
  205. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/tests/test_integration_config_and_tools.py +0 -0
  206. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/tests/test_kg_ingest.py +0 -0
  207. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/tests/test_main.py +0 -0
  208. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/tests/test_office_bridge.py +0 -0
  209. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/tests/test_office_manifest.py +0 -0
  210. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/tests/test_placeholder.py +0 -0
  211. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/tests/test_power_platform.py +0 -0
  212. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/tests/test_publication_workflow.py +0 -0
  213. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/tests/test_startup.py +0 -0
  214. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/tests/test_teams_reliability.py +0 -0
  215. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/tests/test_transport_tls.py +0 -0
  216. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/tests/test_windows_companion.py +0 -0
  217. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/tests/test_windows_control_plane.py +0 -0
  218. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/tests/test_windows_control_plane_service.py +0 -0
  219. {microsoft_agent-2.3.8 → microsoft_agent-2.4.0}/tests/test_windows_runtime.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: microsoft-agent
3
- Version: 2.3.8
3
+ Version: 2.4.0
4
4
  Summary: Governed Microsoft Graph agent and MCP server
5
5
  Author-email: Repository Maintainers <maintainers@knuckles.team>
6
6
  License-Expression: MIT
@@ -11,7 +11,7 @@ Classifier: Programming Language :: Python :: 3
11
11
  Requires-Python: >=3.12
12
12
  Description-Content-Type: text/markdown
13
13
  License-File: LICENSE
14
- Requires-Dist: scion-sdk[mcp]<0.7.0,>=0.6.3
14
+ Requires-Dist: scion-sdk[mcp]<0.11,>=0.10.2
15
15
  Requires-Dist: azure-core>=1.41.0
16
16
  Requires-Dist: httpx>=0.28.1
17
17
  Requires-Dist: keyring>=25.7.0
@@ -19,7 +19,7 @@ Requires-Dist: msal>=1.39.0
19
19
  Requires-Dist: msgraph-sdk>=1.64.0
20
20
  Requires-Dist: pydantic>=2.14.1
21
21
  Provides-Extra: mcp
22
- Requires-Dist: scion-sdk[mcp]<0.7.0,>=0.6.3; extra == "mcp"
22
+ Requires-Dist: scion-sdk[mcp]<0.11,>=0.10.2; extra == "mcp"
23
23
  Provides-Extra: documents
24
24
  Requires-Dist: python-docx>=1.2.0; extra == "documents"
25
25
  Requires-Dist: python-pptx>=1.0.2; extra == "documents"
@@ -147,7 +147,6 @@ tokens remain in memory and are not written to plaintext files.
147
147
  | `MICROSOFT_GRAPH_SCOPES` | — | |
148
148
  | `MICROSOFT_ENABLED_TOOL_GROUPS` | `misc,auth,meta,mail,files,calendar,notes,tasks,contacts,user,chat,teams,sites,search,groups,communications,documents,power_platform,windows,intune` | Tools are registered, but side effects remain disabled until explicitly enabled. |
149
149
  | `MICROSOFT_ALLOW_WRITES` | `false` | |
150
- | `MICROSOFT_ALLOW_DESTRUCTIVE` | `false` | |
151
150
  | `MICROSOFT_INGESTION_PSEUDONYMIZATION_KEY_REF` | — | Required only for graph projection/ingestion. Resolve from AgentConfig or a secret store; use at least 32 bytes and never reuse an identity credential. |
152
151
  | `MICROSOFT_INTEGRATIONS_CONFIG_PATH` | — | Complex Power Platform, Intune, and Windows companion allowlists. |
153
152
  | `MICROSOFT_DOCUMENT_ARTIFACT_ROOT` | — | |
@@ -332,13 +331,13 @@ and MCP caller identity are separate boundaries and both must be configured.
332
331
  | `microsoft_tasks` | `TASKSTOOL` | Manage microsoft tasks operations. |
333
332
  | `microsoft_teams` | `TEAMSTOOL` | Manage microsoft teams operations. |
334
333
  | `microsoft_user` | `USERTOOL` | Manage microsoft user operations. |
335
- | `reboot_intune_device` | `INTUNETOOL` | Immediately reboot an allowlisted Intune device after destructive action acknowledgement and time-bound confirmation. |
334
+ | `reboot_intune_device` | `INTUNETOOL` | Immediately reboot an allowlisted Intune device after time-bound confirmation. |
336
335
  | `remote_lock_intune_device` | `INTUNETOOL` | Remotely lock an allowlisted Intune device after time-bound confirmation bound to that device and action. |
337
336
  | `replace_word_placeholders_in_office` | `DOCUMENTSTOOL` | Replace a literal placeholder throughout a paired, open Word document. |
338
337
  | `run_power_automate_desktop_flow` | `POWER_PLATFORMTOOL` | Run one allowlisted Power Automate desktop flow using its fixed Dataverse connection or connection reference. |
339
338
  | `run_power_automate_flow` | `POWER_PLATFORMTOOL` | Invoke one named, allowlisted, OAuth-protected Power Automate HTTP trigger. The caller cannot supply a trigger URL. |
340
339
  | `scan_intune_device_with_defender` | `INTUNETOOL` | Request a quick or full Microsoft Defender scan on an allowlisted Intune device with time-bound confirmation. |
341
- | `shut_down_intune_device` | `INTUNETOOL` | Immediately shut down an allowlisted Intune device after destructive action acknowledgement and time-bound confirmation. |
340
+ | `shut_down_intune_device` | `INTUNETOOL` | Immediately shut down an allowlisted Intune device after time-bound confirmation. |
342
341
  | `submit_windows_action` | `WINDOWS_COMPANIONTOOL` | Submit one typed allowlisted laptop action through the authenticated outbound relay. Arbitrary shell, process, and URL execution are absent. |
343
342
  | `sync_intune_device` | `INTUNETOOL` | Request an Intune sync for an allowlisted device. Time-bound confirmation evidence bound to the action and device is required. |
344
343
  | `write_word_selection_in_office` | `DOCUMENTSTOOL` | Write bounded text at the selection in a paired, open Word task pane. |
@@ -626,8 +625,8 @@ _79 action-routed tool(s) · 268 verbose 1:1 tool(s). Each is enabled unless its
626
625
 
627
626
  Every routed action passes the fail-closed tool policy. Reads are permitted by
628
627
  default; unknown actions are treated as writes. Writes require
629
- `MICROSOFT_ALLOW_WRITES=true`, and destructive actions also require
630
- `MICROSOFT_ALLOW_DESTRUCTIVE=true`.
628
+ `MICROSOFT_ALLOW_WRITES=true`, and destructive actions also need a live
629
+ confirmation (the gateway's approval or the `confirm` argument).
631
630
 
632
631
  ## MCP client configuration
633
632
 
@@ -675,7 +674,6 @@ default; unknown actions are treated as writes. Writes require
675
674
  "KGTOOL": "true",
676
675
  "MAILTOOL": "true",
677
676
  "METATOOL": "true",
678
- "MICROSOFT_ALLOW_DESTRUCTIVE": "false",
679
677
  "MICROSOFT_ALLOW_DEVICE_CODE": "false",
680
678
  "MICROSOFT_ALLOW_WRITES": "false",
681
679
  "MICROSOFT_AUTHORITY_HOST": "https://login.microsoftonline.com",
@@ -760,7 +758,6 @@ own runtime secret boundary.
760
758
  "KGTOOL": "true",
761
759
  "MAILTOOL": "true",
762
760
  "METATOOL": "true",
763
- "MICROSOFT_ALLOW_DESTRUCTIVE": "false",
764
761
  "MICROSOFT_ALLOW_DEVICE_CODE": "false",
765
762
  "MICROSOFT_ALLOW_WRITES": "false",
766
763
  "MICROSOFT_AUTHORITY_HOST": "https://login.microsoftonline.com",
@@ -844,7 +841,6 @@ docker run -i --rm \
844
841
  -e KGTOOL=true \
845
842
  -e MAILTOOL=true \
846
843
  -e METATOOL=true \
847
- -e MICROSOFT_ALLOW_DESTRUCTIVE=false \
848
844
  -e MICROSOFT_ALLOW_DEVICE_CODE=false \
849
845
  -e MICROSOFT_ALLOW_WRITES=false \
850
846
  -e MICROSOFT_AUTHORITY_HOST=https://login.microsoftonline.com \
@@ -79,7 +79,6 @@ tokens remain in memory and are not written to plaintext files.
79
79
  | `MICROSOFT_GRAPH_SCOPES` | — | |
80
80
  | `MICROSOFT_ENABLED_TOOL_GROUPS` | `misc,auth,meta,mail,files,calendar,notes,tasks,contacts,user,chat,teams,sites,search,groups,communications,documents,power_platform,windows,intune` | Tools are registered, but side effects remain disabled until explicitly enabled. |
81
81
  | `MICROSOFT_ALLOW_WRITES` | `false` | |
82
- | `MICROSOFT_ALLOW_DESTRUCTIVE` | `false` | |
83
82
  | `MICROSOFT_INGESTION_PSEUDONYMIZATION_KEY_REF` | — | Required only for graph projection/ingestion. Resolve from AgentConfig or a secret store; use at least 32 bytes and never reuse an identity credential. |
84
83
  | `MICROSOFT_INTEGRATIONS_CONFIG_PATH` | — | Complex Power Platform, Intune, and Windows companion allowlists. |
85
84
  | `MICROSOFT_DOCUMENT_ARTIFACT_ROOT` | — | |
@@ -264,13 +263,13 @@ and MCP caller identity are separate boundaries and both must be configured.
264
263
  | `microsoft_tasks` | `TASKSTOOL` | Manage microsoft tasks operations. |
265
264
  | `microsoft_teams` | `TEAMSTOOL` | Manage microsoft teams operations. |
266
265
  | `microsoft_user` | `USERTOOL` | Manage microsoft user operations. |
267
- | `reboot_intune_device` | `INTUNETOOL` | Immediately reboot an allowlisted Intune device after destructive action acknowledgement and time-bound confirmation. |
266
+ | `reboot_intune_device` | `INTUNETOOL` | Immediately reboot an allowlisted Intune device after time-bound confirmation. |
268
267
  | `remote_lock_intune_device` | `INTUNETOOL` | Remotely lock an allowlisted Intune device after time-bound confirmation bound to that device and action. |
269
268
  | `replace_word_placeholders_in_office` | `DOCUMENTSTOOL` | Replace a literal placeholder throughout a paired, open Word document. |
270
269
  | `run_power_automate_desktop_flow` | `POWER_PLATFORMTOOL` | Run one allowlisted Power Automate desktop flow using its fixed Dataverse connection or connection reference. |
271
270
  | `run_power_automate_flow` | `POWER_PLATFORMTOOL` | Invoke one named, allowlisted, OAuth-protected Power Automate HTTP trigger. The caller cannot supply a trigger URL. |
272
271
  | `scan_intune_device_with_defender` | `INTUNETOOL` | Request a quick or full Microsoft Defender scan on an allowlisted Intune device with time-bound confirmation. |
273
- | `shut_down_intune_device` | `INTUNETOOL` | Immediately shut down an allowlisted Intune device after destructive action acknowledgement and time-bound confirmation. |
272
+ | `shut_down_intune_device` | `INTUNETOOL` | Immediately shut down an allowlisted Intune device after time-bound confirmation. |
274
273
  | `submit_windows_action` | `WINDOWS_COMPANIONTOOL` | Submit one typed allowlisted laptop action through the authenticated outbound relay. Arbitrary shell, process, and URL execution are absent. |
275
274
  | `sync_intune_device` | `INTUNETOOL` | Request an Intune sync for an allowlisted device. Time-bound confirmation evidence bound to the action and device is required. |
276
275
  | `write_word_selection_in_office` | `DOCUMENTSTOOL` | Write bounded text at the selection in a paired, open Word task pane. |
@@ -558,8 +557,8 @@ _79 action-routed tool(s) · 268 verbose 1:1 tool(s). Each is enabled unless its
558
557
 
559
558
  Every routed action passes the fail-closed tool policy. Reads are permitted by
560
559
  default; unknown actions are treated as writes. Writes require
561
- `MICROSOFT_ALLOW_WRITES=true`, and destructive actions also require
562
- `MICROSOFT_ALLOW_DESTRUCTIVE=true`.
560
+ `MICROSOFT_ALLOW_WRITES=true`, and destructive actions also need a live
561
+ confirmation (the gateway's approval or the `confirm` argument).
563
562
 
564
563
  ## MCP client configuration
565
564
 
@@ -607,7 +606,6 @@ default; unknown actions are treated as writes. Writes require
607
606
  "KGTOOL": "true",
608
607
  "MAILTOOL": "true",
609
608
  "METATOOL": "true",
610
- "MICROSOFT_ALLOW_DESTRUCTIVE": "false",
611
609
  "MICROSOFT_ALLOW_DEVICE_CODE": "false",
612
610
  "MICROSOFT_ALLOW_WRITES": "false",
613
611
  "MICROSOFT_AUTHORITY_HOST": "https://login.microsoftonline.com",
@@ -692,7 +690,6 @@ own runtime secret boundary.
692
690
  "KGTOOL": "true",
693
691
  "MAILTOOL": "true",
694
692
  "METATOOL": "true",
695
- "MICROSOFT_ALLOW_DESTRUCTIVE": "false",
696
693
  "MICROSOFT_ALLOW_DEVICE_CODE": "false",
697
694
  "MICROSOFT_ALLOW_WRITES": "false",
698
695
  "MICROSOFT_AUTHORITY_HOST": "https://login.microsoftonline.com",
@@ -776,7 +773,6 @@ docker run -i --rm \
776
773
  -e KGTOOL=true \
777
774
  -e MAILTOOL=true \
778
775
  -e METATOOL=true \
779
- -e MICROSOFT_ALLOW_DESTRUCTIVE=false \
780
776
  -e MICROSOFT_ALLOW_DEVICE_CODE=false \
781
777
  -e MICROSOFT_ALLOW_WRITES=false \
782
778
  -e MICROSOFT_AUTHORITY_HOST=https://login.microsoftonline.com \
@@ -103,12 +103,12 @@ server is currently allowed to invoke:
103
103
 
104
104
  ```text
105
105
  MICROSOFT_ALLOW_WRITES=false
106
- MICROSOFT_ALLOW_DESTRUCTIVE=false
107
106
  ```
108
107
 
109
- Reads work with both flags disabled. Sends, creates, edits, uploads, flow runs,
108
+ Reads work with writes disabled. Sends, creates, edits, uploads, flow runs,
110
109
  and remote actions require writes. Deletes, wipes, retirements, immediate
111
- reboots, shutdowns, and other destructive tools require both flags. Intune and
110
+ reboots, shutdowns, and other destructive tools require writes and also a live
111
+ confirmation (the gateway's approval or the `confirm` argument). Intune and
112
112
  Windows companion actions also enforce per-device/action allowlists and
113
113
  time-bound confirmation evidence inside their service layer.
114
114
 
@@ -77,7 +77,8 @@ protected.
77
77
  Intune configuration requires at least one managed-device UUID and an explicit
78
78
  action allowlist. Every mutation requires evidence bound to the device, action,
79
79
  correlation ID, idempotency key, approver, reason, and a short expiration. Reboot
80
- and shutdown also require destructive acknowledgement.
80
+ and shutdown also need a live confirmation (the gateway's approval or the
81
+ `confirm` argument).
81
82
 
82
83
  The service uses only Microsoft Graph v1.0. `rotateBitLockerKeys` is visible in
83
84
  the capability report as unsupported because Microsoft currently documents it
@@ -27,8 +27,8 @@ URLs, or an open-ended action name.
27
27
 
28
28
  1. Start the MCP server over HTTPS and set
29
29
  `MICROSOFT_OFFICE_ADDIN_ORIGINS` to the task pane's exact HTTPS origin.
30
- 2. Enable `documents` and `MICROSOFT_ALLOW_WRITES`. Enable
31
- `MICROSOFT_ALLOW_DESTRUCTIVE` only if the agent may delete slides.
30
+ 2. Enable `documents` and `MICROSOFT_ALLOW_WRITES`. Deleting a slide also needs
31
+ a live confirmation (the gateway's approval or the `confirm` argument).
32
32
  3. Ask the agent to call `create_office_pairing` with `Word` or `PowerPoint`
33
33
  and a recognizable window label.
34
34
  4. Paste the returned one-time secret into **Agent pairing** in that intended
@@ -23,8 +23,8 @@ The installed provider families cover:
23
23
 
24
24
  Every routed action crosses the fail-closed Microsoft tool policy. Read actions are
25
25
  available by default. Unknown actions are classified as writes. Non-destructive
26
- writes require `MICROSOFT_ALLOW_WRITES=true`; destructive actions also
27
- require `MICROSOFT_ALLOW_DESTRUCTIVE=true`.
26
+ writes require `MICROSOFT_ALLOW_WRITES=true`; destructive actions also need a live
27
+ confirmation (the gateway's approval or the `confirm` argument).
28
28
 
29
29
  `list_microsoft_ingestion_projection` returns only keyed opaque node identifiers,
30
30
  types, and relationships. Arbora validates the signed source manifest and
@@ -0,0 +1,28 @@
1
+ """Microsoft Agent.
2
+
3
+ CONCEPT:AU-ECO.mcp.fastmcp-middleware
4
+ """
5
+
6
+ from scion_sdk.connector import Connector
7
+ from scion_sdk.connector_hooks import RegistrationContext
8
+
9
+ from microsoft_agent._version import __version__
10
+ from microsoft_agent.api_client import MicrosoftGraphApi
11
+ from microsoft_agent.auth import get_client_dependency
12
+
13
+
14
+ def _register_extras(context: RegistrationContext) -> None:
15
+ """Register the non-Graph tools and the side-effect policy through the SDK hook."""
16
+ from microsoft_agent.mcp_server import register_extra_surface
17
+
18
+ register_extra_surface(context.server)
19
+
20
+
21
+ connector = Connector(
22
+ instructions="microsoft-agent MCP Server: one typed tool per Microsoft Graph operation.",
23
+ api=MicrosoftGraphApi,
24
+ get_client=get_client_dependency,
25
+ extra_registrations=(_register_extras,),
26
+ )
27
+
28
+ __all__ = ["__version__", "connector"]
@@ -1,5 +1,7 @@
1
1
  from typing import Any
2
2
 
3
+ from scion_sdk.mcp.destructive import destructive_operation
4
+
3
5
  from microsoft_agent.api._graph_models import (
4
6
  graph_model_from_dict,
5
7
  )
@@ -137,6 +139,7 @@ class MicrosoftGraphApiAdmin(MicrosoftGraphApiBase):
137
139
  print(f"Operation failed: {type(e).__name__}")
138
140
  return {"error": "Operation failed"}
139
141
 
142
+ @destructive_operation
140
143
  async def update_organization(
141
144
  self, org_id: str, data: dict[str, Any], params: dict | None = None
142
145
  ) -> dict[str, Any]:
@@ -555,6 +558,7 @@ class MicrosoftGraphApiAdmin(MicrosoftGraphApiBase):
555
558
  print(f"Operation failed: {type(e).__name__}")
556
559
  return {"error": "Operation failed"}
557
560
 
561
+ @destructive_operation
558
562
  async def create_conditional_access_policy(
559
563
  self, data: dict[str, Any], params: dict | None = None
560
564
  ) -> dict[str, Any]:
@@ -582,6 +586,7 @@ class MicrosoftGraphApiAdmin(MicrosoftGraphApiBase):
582
586
  print(f"Operation failed: {type(e).__name__}")
583
587
  return {"error": "Operation failed"}
584
588
 
589
+ @destructive_operation
585
590
  async def update_conditional_access_policy(
586
591
  self, policy_id: str, data: dict[str, Any], params: dict | None = None
587
592
  ) -> dict[str, Any]:
@@ -919,6 +924,7 @@ class MicrosoftGraphApiAdmin(MicrosoftGraphApiBase):
919
924
  print(f"Operation failed: {type(e).__name__}")
920
925
  return {"error": "Operation failed"}
921
926
 
927
+ @destructive_operation
922
928
  async def create_role_assignment(
923
929
  self, data: dict[str, Any], params: dict | None = None
924
930
  ) -> dict[str, Any]:
@@ -8,7 +8,7 @@ from kiota_authentication_azure.azure_identity_authentication_provider import (
8
8
  from msgraph import GraphServiceClient
9
9
  from msgraph.graph_request_adapter import GraphRequestAdapter
10
10
  from scion_sdk.exceptions import AuthError
11
- from scion_sdk.http.client import create_async_http_client
11
+ from scion_sdk.http.client import build_http_client
12
12
  from scion_sdk.http.options import HttpClientOptions
13
13
  from scion_sdk.http.retry import RetryPolicy
14
14
  from scion_sdk.tls.profile import ResolvedTLSProfile
@@ -44,7 +44,7 @@ class MicrosoftGraphApiBase(ABC):
44
44
  scopes=auth_manager.scopes,
45
45
  allowed_hosts=[endpoint_host],
46
46
  )
47
- self._http_client = create_async_http_client(
47
+ self._http_client = build_http_client(
48
48
  HttpClientOptions(
49
49
  base_url=auth_manager.graph_base_url,
50
50
  timeout=httpx.Timeout(30.0),
@@ -55,7 +55,8 @@ class MicrosoftGraphApiBase(ABC):
55
55
  max_keepalive_connections=16,
56
56
  ),
57
57
  pin_egress=True,
58
- )
58
+ ),
59
+ async_=True,
59
60
  )
60
61
  except Exception:
61
62
  self.tls_profile.cleanup()
@@ -1,6 +1,7 @@
1
1
  from typing import Any
2
2
 
3
3
  from msgraph.generated.users.users_request_builder import UsersRequestBuilder
4
+ from scion_sdk.mcp.destructive import destructive_operation
4
5
 
5
6
  from microsoft_agent.api._graph_models import (
6
7
  graph_model_from_dict,
@@ -639,6 +640,7 @@ class MicrosoftGraphApiDirectory(MicrosoftGraphApiBase):
639
640
  print(f"Operation failed: {type(e).__name__}")
640
641
  return {"error": "Operation failed"}
641
642
 
643
+ @destructive_operation
642
644
  async def dismiss_risky_user(
643
645
  self, user_id: str, params: dict | None = None
644
646
  ) -> dict[str, Any]:
@@ -1,5 +1,7 @@
1
1
  from typing import Any
2
2
 
3
+ from scion_sdk.mcp.destructive import destructive_operation
4
+
3
5
  from microsoft_agent.api._graph_models import (
4
6
  comma_separated_values,
5
7
  graph_model_from_dict,
@@ -581,6 +583,7 @@ class MicrosoftGraphApiDrive(MicrosoftGraphApiBase):
581
583
  print(f"Operation failed: {type(e).__name__}")
582
584
  return {"error": "Operation failed"}
583
585
 
586
+ @destructive_operation
584
587
  async def update_admin_sharepoint(
585
588
  self, data: dict[str, Any], params: dict | None = None
586
589
  ) -> dict[str, Any]:
@@ -5,6 +5,8 @@ from typing import TYPE_CHECKING, Any
5
5
  if TYPE_CHECKING:
6
6
  from microsoft_agent.power_platform import AsyncHttpTransport
7
7
 
8
+ from scion_sdk.mcp.destructive import destructive_operation
9
+
8
10
  from microsoft_agent.api._graph_models import (
9
11
  decode_graph_base64,
10
12
  graph_model_from_dict,
@@ -482,6 +484,7 @@ class MicrosoftGraphApiOther(MicrosoftGraphApiBase):
482
484
  print(f"Operation failed: {type(e).__name__}")
483
485
  return {"error": "Operation failed"}
484
486
 
487
+ @destructive_operation
485
488
  async def create_application(
486
489
  self, data: dict[str, Any], params: dict | None = None
487
490
  ) -> dict[str, Any]:
@@ -553,6 +556,7 @@ class MicrosoftGraphApiOther(MicrosoftGraphApiBase):
553
556
  print(f"Operation failed: {type(e).__name__}")
554
557
  return {"error": "Operation failed"}
555
558
 
559
+ @destructive_operation
556
560
  async def add_application_password(
557
561
  self, app_id: str, data: dict[str, Any], params: dict | None = None
558
562
  ) -> dict[str, Any]:
@@ -657,6 +661,7 @@ class MicrosoftGraphApiOther(MicrosoftGraphApiBase):
657
661
  print(f"Operation failed: {type(e).__name__}")
658
662
  return {"error": "Operation failed"}
659
663
 
664
+ @destructive_operation
660
665
  async def create_service_principal(
661
666
  self, data: dict[str, Any], params: dict | None = None
662
667
  ) -> dict[str, Any]:
@@ -1069,6 +1074,7 @@ class MicrosoftGraphApiOther(MicrosoftGraphApiBase):
1069
1074
  print(f"Operation failed: {type(e).__name__}")
1070
1075
  return {"error": "Operation failed"}
1071
1076
 
1077
+ @destructive_operation
1072
1078
  async def wipe_managed_device(
1073
1079
  self, device_id: str, params: dict | None = None
1074
1080
  ) -> dict[str, Any]:
@@ -1094,6 +1100,7 @@ class MicrosoftGraphApiOther(MicrosoftGraphApiBase):
1094
1100
  print(f"Operation failed: {type(e).__name__}")
1095
1101
  return {"error": "Operation failed"}
1096
1102
 
1103
+ @destructive_operation
1097
1104
  async def retire_managed_device(
1098
1105
  self, device_id: str, params: dict | None = None
1099
1106
  ) -> dict[str, Any]:
@@ -39,7 +39,6 @@ def configuration_report() -> dict[str, Any]:
39
39
  },
40
40
  "policy": {
41
41
  "writes_enabled": settings.allow_write_tools,
42
- "destructive_enabled": settings.allow_destructive_tools,
43
42
  "enabled_tool_groups": list(settings.enabled_tool_groups),
44
43
  },
45
44
  "documents": get_document_capabilities().model_dump(mode="json"),