Give a device-local AI agent its own Microsoft Entra identity. Reference implementation for Microsoft Agent 365 and Entra Agent ID.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · streamable-http counts 37 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
add_file_comment
-
add_promise
-
add_teams_member
-
add_word_comment
-
audit_log
-
bootstrap_body_state
-
create_chat
-
create_word_document
-
delete_teams_message
-
get_a365_file_metadata_by_url
-
list_chat_members
-
list_promises
-
list_recent_files
-
post_thinking_placeholder
-
read_a365_binary_file
-
read_a365_text_file
-
read_email
-
read_file
-
read_interactions
-
read_teams_messages
-
read_word_document
-
reply_to_word_comment
-
resolve_file_url
-
resolve_placeholder
-
resolve_promise
-
run_daily_summary
-
send_card
-
send_email
-
send_teams_message
-
share_file
-
update_placeholder
-
upload_file
-
view_image
-
wait_for_sponsor_dm
-
watch_teams_replies
-
whoami
-
write_text_file
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit f878cea · analyzer v32 · 3w ago
skills & prompt files 6
- skill microsoft-entrabot-f878cea/.claude/skills/implement-agent-id/SKILL.md
- skill microsoft-entrabot-f878cea/.claude/skills/refresh-persona/SKILL.md
- agent-rules microsoft-entrabot-f878cea/AGENTS.md
- agent-rules microsoft-entrabot-f878cea/CLAUDE.md
- prompt-file microsoft-entrabot-f878cea/engineering-history/prompts/multi-tenant-lightweight-chat-planning-prompt.md
- prompt-file microsoft-entrabot-f878cea/prompts/agent_system.md
danger signals2
- dynamic code execution eval()/exec() microsoft-entrabot-f878cea/tests/test_efferent_copy.py :203
exec( - dynamic code execution __import__() microsoft-entrabot-f878cea/tests/test_keyring_sanity.py :15
cls = getattr(__import__(module_name, fromlist=[class_name]), class_name)
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 240
filesystem 96
- fs (weak) microsoft-entrabot-f878cea/scripts/add_agent_sponsor.py :34
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/scripts/catch_up.py :10
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/scripts/claude_memory_sync.py :31
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/scripts/deprovision_blob_storage.py :33
import shutil - fs (weak) microsoft-entrabot-f878cea/scripts/deprovision_entra_agent_identity.py :20
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/scripts/ensure_a365_work_iq_permissions.py :18
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/scripts/entra_provisioning.py :32
import shutil - fs (weak) microsoft-entrabot-f878cea/scripts/generate_windows_cert.py :30
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/scripts/grant_files_consent.py :32
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/scripts/health_check.py :11
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/scripts/hooks/block_local_memory_write.py :26
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/scripts/hooks/inject_body_prompt.py :42
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/scripts/hooks/require_body_prompt.py :42
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/scripts/mcp_config.py :31
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/scripts/migrate_cursors_to_upn.py :43
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/scripts/provision_blob_storage.py :41
import shutil - fs (weak) microsoft-entrabot-f878cea/scripts/provisioner-token.py :19
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/scripts/remove_agent_sponsor.py :26
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/scripts/remove_agent_user_licenses.py :28
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/scripts/revoke_consent.py :29
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/scripts/rotate_cert_windows.py :23
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/scripts/spike_a365_work_iq.py :14
from pathlib import Path - fs microsoft-entrabot-f878cea/src/entrabot/a365/config.py :6
from pathlib import Path - fs microsoft-entrabot-f878cea/src/entrabot/a365/manifest.py :7
from pathlib import Path - fs microsoft-entrabot-f878cea/src/entrabot/a365/provider.py :5
from pathlib import Path - fs microsoft-entrabot-f878cea/src/entrabot/auth/delegated.py :13
from pathlib import Path - fs microsoft-entrabot-f878cea/src/entrabot/config.py :12
import shutil - fs microsoft-entrabot-f878cea/src/entrabot/efferent_copy.py :51
from pathlib import Path - fs microsoft-entrabot-f878cea/src/entrabot/identity/sponsors.py :20
from pathlib import Path - fs microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :21
from pathlib import Path - fs microsoft-entrabot-f878cea/src/entrabot/preflight.py :24
from pathlib import Path - fs microsoft-entrabot-f878cea/src/entrabot/singleton.py :46
from pathlib import Path - fs microsoft-entrabot-f878cea/src/entrabot/storage/backend.py :25
from pathlib import Path - fs microsoft-entrabot-f878cea/src/entrabot/storage/migration.py :25
from pathlib import Path - fs microsoft-entrabot-f878cea/src/entrabot/storage/persona.py :19
from pathlib import Path - fs microsoft-entrabot-f878cea/src/entrabot/tools/audit.py :14
from pathlib import Path - fs microsoft-entrabot-f878cea/src/entrabot/tools/email_poll.py :18
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/a365/test_manifest.py :4
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/a365/test_provider.py :5
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/auth/test_delegated.py :10
import shutil - fs (weak) microsoft-entrabot-f878cea/tests/conftest.py :8
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/docs/_helpers.py :11
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/docs/test_all_pages_in_nav.py :10
from pathlib import PureWindowsPath - fs (weak) microsoft-entrabot-f878cea/tests/docs/test_no_historical_prefixes.py :8
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/evals/conftest.py :21
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/hooks/test_block_local_memory_write.py :20
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/hooks/test_inject_body_prompt.py :29
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/hooks/test_require_body_prompt.py :21
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/scripts/test_a365_setup_prereqs.py :3
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/scripts/test_assign_agent_user_licenses.py :7
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/scripts/test_claude_memory_sync.py :17
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/scripts/test_create_entra_agent_ids.py :16
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/scripts/test_deprovision_blob_storage.py :7
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/scripts/test_deprovision_entra_agent_identity.py :12
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/scripts/test_ensure_a365_work_iq_permissions.py :5
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/scripts/test_entra_provisioning.py :7
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/scripts/test_grant_consent.py :7
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/scripts/test_health_check.py :7
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/scripts/test_list_agent_identities.py :7
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/scripts/test_list_sponsors.py :8
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/scripts/test_mcp_config.py :24
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/scripts/test_provision_blob_storage.py :13
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/scripts/test_provisioner_token_contract.py :11
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/scripts/test_remove_agent_sponsor.py :7
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/scripts/test_remove_agent_user_licenses.py :7
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/scripts/test_revoke_consent.py :7
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/scripts/test_show_agent_status.py :10
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/scripts/test_show_permissions.py :8
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/scripts/test_smoke_harness.py :7
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/scripts/test_status_wrapper.py :3
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/smoke/smokeit.py :15
import shutil - fs (weak) microsoft-entrabot-f878cea/tests/storage/test_backend.py :18
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/storage/test_migration.py :17
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/storage/test_persona.py :20
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/test_certificate_windows.py :27
from pathlib import Path # noqa: E402 - fs (weak) microsoft-entrabot-f878cea/tests/test_config.py :5
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/test_config_windows_path.py :22
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/test_cursor_migration.py :26
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/test_deploy_rollback.py :20
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/test_efferent_copy.py :20
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/test_entra_provisioning_keyring_backend.py :13
import pathlib - fs (weak) microsoft-entrabot-f878cea/tests/test_generate_windows_cert.py :13
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/test_mcp_server_body_tools.py :12
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/test_no_dead_imports.py :15
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/test_preflight.py :15
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/test_prompt_doctrine.py :17
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/test_singleton.py :16
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/tools/test_audit.py :6
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/tools/test_body_bootstrap.py :13
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/tools/test_daily_summary.py :21
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/tools/test_email_poll.py :16
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/tools/test_identity.py :9
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/tools/test_interaction_log.py :23
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/tools/test_promises.py :304
# 3 open (kept). - fs (weak) microsoft-entrabot-f878cea/tests/tools/test_read_interactions.py :15
from pathlib import Path - fs (weak) microsoft-entrabot-f878cea/tests/tools/test_wait_for_sponsor_dm.py :554
from pathlib import Path
shell / exec 11
- shell (weak) microsoft-entrabot-f878cea/scripts/deprovision_blob_storage.py :34
import subprocess - shell (weak) microsoft-entrabot-f878cea/scripts/entra_provisioning.py :33
import subprocess - shell (weak) microsoft-entrabot-f878cea/scripts/generate_windows_cert.py :27
import subprocess # noqa: S404 — subprocess is the whole point - shell (weak) microsoft-entrabot-f878cea/scripts/provision_blob_storage.py :42
import subprocess - shell microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :117
import subprocess - shell (weak) microsoft-entrabot-f878cea/tests/hooks/test_block_local_memory_write.py :18
import subprocess - shell (weak) microsoft-entrabot-f878cea/tests/hooks/test_inject_body_prompt.py :27
import subprocess - shell (weak) microsoft-entrabot-f878cea/tests/hooks/test_require_body_prompt.py :18
import subprocess - shell (weak) microsoft-entrabot-f878cea/tests/smoke/smokeit.py :16
import subprocess - shell (weak) microsoft-entrabot-f878cea/tests/test_certificate_windows.py :49
import subprocess - shell (weak) microsoft-entrabot-f878cea/tests/test_mcp_server_integration.py :83
import subprocess
network 52
- net (weak) microsoft-entrabot-f878cea/scripts/add_agent_sponsor.py :36
import requests - net (weak) microsoft-entrabot-f878cea/scripts/catch_up.py :12
import httpx - net (weak) microsoft-entrabot-f878cea/scripts/create_entra_agent_ids.py :23
import socket - net (weak) microsoft-entrabot-f878cea/scripts/diagnose-chat.py :76
import httpx - net (weak) microsoft-entrabot-f878cea/scripts/diagnose_sponsor_emails.py :24
import httpx - net (weak) microsoft-entrabot-f878cea/scripts/ensure_a365_work_iq_permissions.py :21
import requests - net (weak) microsoft-entrabot-f878cea/scripts/find_local_blueprint_cert.py :24
import requests - net (weak) microsoft-entrabot-f878cea/scripts/grant_consent.py :29
import requests - net (weak) microsoft-entrabot-f878cea/scripts/list_blueprint_certs.py :21
import requests - net (weak) microsoft-entrabot-f878cea/scripts/migrate_cursors_to_upn.py :44
from urllib.parse import unquote - net (weak) microsoft-entrabot-f878cea/scripts/read_email.py :8
import httpx - net (weak) microsoft-entrabot-f878cea/scripts/remove_agent_sponsor.py :28
import requests - net (weak) microsoft-entrabot-f878cea/scripts/revoke_consent.py :31
import requests - net (weak) microsoft-entrabot-f878cea/scripts/show_agent_status.py :25
from urllib.parse import urlparse - net (weak) microsoft-entrabot-f878cea/scripts/spike_file_comments.py :25
from urllib.parse import urlparse - net (weak) microsoft-entrabot-f878cea/scripts/verify_blueprint_cert.py :28
import requests - net microsoft-entrabot-f878cea/src/entrabot/a365/mcp_client.py :8
import httpx - net microsoft-entrabot-f878cea/src/entrabot/graph_helpers.py :12
from urllib.parse import urlparse - net microsoft-entrabot-f878cea/src/entrabot/identity/sponsors.py :23
import httpx - net microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :23
import httpx - net microsoft-entrabot-f878cea/src/entrabot/preflight.py :27
import httpx - net microsoft-entrabot-f878cea/src/entrabot/storage/blob.py :15
import httpx - net microsoft-entrabot-f878cea/src/entrabot/tools/chat_cursors.py :40
from urllib.parse import quote - net microsoft-entrabot-f878cea/src/entrabot/tools/email.py :19
import httpx - net microsoft-entrabot-f878cea/src/entrabot/tools/email_poll.py :20
import httpx - net microsoft-entrabot-f878cea/src/entrabot/tools/files.py :41
from urllib.parse import quote, urlparse - net microsoft-entrabot-f878cea/src/entrabot/tools/identity.py :12
import httpx - net microsoft-entrabot-f878cea/src/entrabot/tools/promises.py :184
import httpx - net microsoft-entrabot-f878cea/src/entrabot/tools/rate_limit.py :1
"""Graph API 429 rate-limit retry transport for httpx. - net microsoft-entrabot-f878cea/src/entrabot/tools/teams.py :3
All HTTP calls use ``httpx.AsyncClient`` with proper auth headers. - net microsoft-entrabot-f878cea/src/entrabot/url_safety.py :5
from urllib.parse import urlparse - net (weak) microsoft-entrabot-f878cea/tests/a365/test_mcp_client.py :3
import httpx - net (weak) microsoft-entrabot-f878cea/tests/evals/conftest.py :24
import httpx - net (weak) microsoft-entrabot-f878cea/tests/evals/test_files_scenario_1.py :13
import httpx - net (weak) microsoft-entrabot-f878cea/tests/identity/test_sponsor_chat_member_fetch.py :4
while reusing a single Agent User token + a single ``httpx.Client`` — fanning - net (weak) microsoft-entrabot-f878cea/tests/identity/test_sponsor_user_enrichment.py :25
import httpx - net (weak) microsoft-entrabot-f878cea/tests/smoke/smokeit.py :464
import requests - net (weak) microsoft-entrabot-f878cea/tests/storage/test_blob.py :13
import httpx - net (weak) microsoft-entrabot-f878cea/tests/test_cursor_migration.py :345
from urllib.parse import quote - net (weak) microsoft-entrabot-f878cea/tests/test_mcp_server_integration.py :23
import httpx - net (weak) microsoft-entrabot-f878cea/tests/test_preflight.py :18
import httpx - net (weak) microsoft-entrabot-f878cea/tests/tools/test_add_member_channel_binding.py :23
import httpx - net (weak) microsoft-entrabot-f878cea/tests/tools/test_add_member_sponsor_gate.py :20
import httpx - net (weak) microsoft-entrabot-f878cea/tests/tools/test_daily_summary.py :23
import httpx - net (weak) microsoft-entrabot-f878cea/tests/tools/test_email.py :14
import httpx - net (weak) microsoft-entrabot-f878cea/tests/tools/test_email_poll.py :18
import httpx - net (weak) microsoft-entrabot-f878cea/tests/tools/test_files.py :18
from urllib.parse import urlparse - net (weak) microsoft-entrabot-f878cea/tests/tools/test_rate_limit.py :9
import httpx - net (weak) microsoft-entrabot-f878cea/tests/tools/test_read_email.py :17
import httpx - net (weak) microsoft-entrabot-f878cea/tests/tools/test_teams.py :13
from urllib.parse import parse_qs - net (weak) microsoft-entrabot-f878cea/tests/tools/test_teams_odata_escape.py :15
import httpx - net (weak) microsoft-entrabot-f878cea/tests/tools/test_watch.py :10
import httpx
secrets 11
- secrets (weak) microsoft-entrabot-f878cea/scripts/entra_provisioning.py :80
import keyring as _kr - secrets (weak) microsoft-entrabot-f878cea/scripts/find_local_blueprint_cert.py :23
import keyring - secrets microsoft-entrabot-f878cea/src/entrabot/platform/keyring_backend.py :10
import keyring - secrets microsoft-entrabot-f878cea/src/entrabot/platform/linux.py :7
import keyring - secrets microsoft-entrabot-f878cea/src/entrabot/platform/mac.py :7
import keyring - secrets microsoft-entrabot-f878cea/src/entrabot/platform/windows.py :27
import keyring - secrets (weak) microsoft-entrabot-f878cea/tests/smoke/smokeit.py :254
import keyring - secrets (weak) microsoft-entrabot-f878cea/tests/test_keyring_sanity.py :7
import keyring - secrets (weak) microsoft-entrabot-f878cea/tests/test_platform_keyring_backend.py :8
import keyring - secrets (weak) microsoft-entrabot-f878cea/tests/test_platform_windows.py :12
from keyring.backends.Windows import WinVaultKeyring - secrets (weak) microsoft-entrabot-f878cea/tests/tools/test_audit.py :251
import keyring.errors
tool registrations 37
- send_teams_message microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :2156
- post_thinking_placeholder microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :2446
- update_placeholder microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :2506
- resolve_placeholder microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :2575
- delete_teams_message microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :2667
- send_email microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :2776
- read_email microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :2909
- send_card microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :2953
- list_chat_members microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :3075
- add_teams_member microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :3114
- create_chat microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :3197
- read_teams_messages microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :3260
- watch_teams_replies microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :3305
- wait_for_sponsor_dm microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :3459
- audit_log microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :3739
- view_image microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :3785
- whoami microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :3842
- run_daily_summary microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :3940
- add_promise microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :3987
- list_promises microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :4075
- read_interactions microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :4108
- bootstrap_body_state microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :4162
- resolve_promise microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :4185
- resolve_file_url microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :4303
- list_recent_files microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :4338
- read_file microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :4387
- add_file_comment microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :4469
- read_word_document microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :4541
- create_word_document microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :4571
- add_word_comment microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :4598
- reply_to_word_comment microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :4625
- get_a365_file_metadata_by_url microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :4658
- read_a365_text_file microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :4685
- read_a365_binary_file microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :4710
- write_text_file microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :4740
- upload_file microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :4815
- share_file microsoft-entrabot-f878cea/src/entrabot/mcp_server.py :4895
declared dependencies 21
- mcp@>=1.0.0
- msal@>=1.28.0
- msal-extensions@>=1.2.0
- httpx@>=0.27.0
- keyring@>=25.0.0
- platformdirs@>=4.0.0
- pydantic@>=2.0
- cryptography@>=42.0
- PyJWT@>=2.8.0
- pypdf@>=4.0
- click@>=8.1.0
- pytest@>=8.0
- pytest-asyncio@>=0.23.0
- pytest-cov@>=5.0
- ruff@>=0.4
- respx@>=0.22.0
- azure-identity@>=1.15.0
- PyYAML@>=6.0
- mkdocs-material@>=9.5
- mkdocs-redirects@>=1.2
- requests@>=2.31