microsoft-agentSAFE
Microsoft A2A / AG-UI Agent
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
Microsoft Agent provides a governed Microsoft Graph MCP server and an optional A2A agent. It uses Agent Utilities for MCP, identity propagation, intent delegation, configuration, telemetry, and graph integration.
Current package version: 2.1.0
Capabilities
- Outlook mail, calendars, contacts, tasks, and attachments
- Teams chats, channels, meetings, and presence
- OneDrive, SharePoint, Excel, OneNote, and Universal Print
- Entra users, groups, applications, policy, audit, security, and reports
- Optional Word and PowerPoint generation and an exact-origin Office.js bridge
- Optional Power Platform, Intune, and outbound Windows companion integrations
- Governed ingestion into Epistemic Graph with provider-owned ontology, mapping,
schema fingerprint, provenance, and quarantine contracts
- One consolidated
microsoft-agent-operationsskill
The current implementation has one modular Graph client in microsoft_agent/api_client.py, one authentication authority in microsoft_agent/auth.py, and one MCP entry point in microsoft_agent/mcp_server.py. No raw-token fallback, plaintext cache, bundled database, bundled endpoint profile, or duplicate API wrapper is shipped.
Install
python -m pip install "microsoft-agent[mcp]"
Useful extras:
python -m pip install "microsoft-agent[agent]" # A2A agent runtime python -m pip install "microsoft-agent[documents]" # Word and PowerPoint python -m pip install "microsoft-agent[cloud]" # managed/workload identity python -m pip install "microsoft-agent[windows]" # Windows companion python -m pip install "microsoft-agent[control-plane]" python -m pip install "microsoft-agent[all]"
Agent Utilities depends on epistemic-graph[full]; the full and numeric engine features therefore remain available when the A2A/GraphOS runtime is installed.
Authentication
Microsoft identity values are provided by deployment configuration. There is no baked-in client identi
b2873c9efe95OBSERVED · 2026-10-11Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add microsoft-agent-office-addin --env MICROSOFT_TOKEN=${MICROSOFT_TOKEN} -- npx -y [email protected]{
"mcpServers": {
"microsoft-agent-office-addin": {
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"MICROSOFT_TOKEN": "${MICROSOFT_TOKEN}"
}
}
}
}Exposed tools (16)
13 read · 3 write · 0 destructive.
| Tool | Risk | Description |
|---|---|---|
activate_power_automate_flow | read | Activate a flow when lifecycle changes are explicitly enabled. |
add_powerpoint_slide_in_office | write | Enqueue a typed PowerPoint append-slide request. |
deactivate_power_automate_flow | read | Deactivate a flow when lifecycle changes are explicitly enabled. |
get_intune_managed_device | read | Retrieve a managed device after enforcing its UUID allowlist. |
get_office_command_result | read | Read one queued, delivered, completed, failed, or expired command. |
get_power_automate_desktop_flow_outputs | read | Read the documented outputs value for a desktop-flow session. |
get_power_automate_desktop_flow_run | write | Read documented Dataverse status fields for a desktop-flow session. |
get_power_automate_flow | read | Retrieve a cloud-flow workflow row by its immutable ID. |
get_power_platform_configuration | write | Inspect Power Platform readiness without revealing trigger URLs. |
get_windows_action_result | read | Retrieve a companion action result through the authenticated relay. |
get_windows_companion_configuration | read | Inspect configured device aliases without exposing identity material. |
get_windows_device_health | read | Get connection state and validated companion identity for one device. |
get_word_selection_from_office | read | Enqueue a typed Word selection read and optionally await its result. |
list_intune_managed_devices | read | List allowlisted managed-device inventory from Graph v1.0. |
list_office_sessions | read | Return live Office session IDs, hosts, labels, and capabilities. |
list_powerpoint_slides_in_office | read | Enqueue a typed PowerPoint slide-list request. |
Trust audit
SAFEgrade B · trust 84/100 Nothing in the source contradicts what it says it does. Grade A is reserved for packages that have also passed the behavioural sandbox.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | PASS |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- none-observed
- Network
- declared (5 observation(s))
- Shell
- none-observed
- Dependencies
- not all pinned
- Secrets in source
- none-found
Findings (20)
.bumpversion.cfg
.codespellignore
.coveragerc
.pre-commit-config.yaml
mod = importlib.import_module(pkg_name)
mod = importlib.import_module(pkg_name)
mod = importlib.import_module(pkg_name)
actual_thumbprint = hashlib.sha1(certificate_der).hexdigest().upper() # noqa: S324
"https://169.254.169.254/latest/meta-data",
"https://127.0.0.1/session",
"https://10.0.0.1/session",
"https://169.254.169.254/latest/meta-data",
return base64.b64decode(value, validate=True)
body = base64.b64decode(content_bytes)
attachment.content_bytes = base64.b64decode(content_bytes)
return base64.b64decode(self.content_base64, validate=True)
content = base64.b64decode(self.content_base64, validate=True)
@types/office-js, copy-webpack-plugin, office-addin-dev-certs, ts-loader, typescript, vitest, webpack, webpack-cli
agent-utilities, msal, keyring, msgraph-sdk
not collect or persist that password.
Gates applied: no_behavioural_pass.
b2873c9efe95full audit observations/trust-audit/mcp-server/knuckles-team__microsoft-agent.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-11 | b2873c9efe95 | SAFE | B | 84 | first audit |
Questions
What is the microsoft-agent MCP server?
Microsoft A2A / AG-UI Agent
What tools does microsoft-agent expose?
16 in total: 13 read-only, 3 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.
Is microsoft-agent safe to connect to an agent?
The audit found nothing in the source that contradicts what it says it does, and graded it B (84/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean server reads B.
What credentials does microsoft-agent need?
It reads MICROSOFT_TOKEN from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does microsoft-agent run?
It speaks sse, stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as microsoft-agent-office-addin at 0.1.0.
How current is this page?
The grade is for one exact copy of the source (b2873c9efe95), read on 2026-10-11. The repository is watched and re-audited when it changes.