github Python analyzed d1f965b

the-code-learner/mail-task-mcp-server

github

A self-hosted email and task control plane for MCP-compatible AI agents.

maintainer
the-code-learner
licence
Apache-2.0
first seen
2026-08-16
last seen
2026-09-06
releases · 30d
27
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 90 tools
transport streamable-http · http counts 90 tools · 0 res · 0 prompts permission surface via code analysis

tools

  • amp_account_status
  • approve_job
  • authorize_domain
  • authorize_recipient
  • build_status
  • complete_job
  • create_draft
  • create_execution_profile
  • create_follow_up_draft
  • create_job
  • create_memory
  • create_owner
  • create_project
  • create_reply_draft
  • create_skill
  • delete_job
  • delete_memory
  • delete_skill
  • delete_stored_file
  • email_security_status
  • export_knowledge
  • file_store_status
  • follow_up_email
  • get_email
  • get_email_attachment
  • get_file_base64
  • get_file_info
  • get_job
  • get_job_history
  • get_knowledge_audit
  • get_knowledge_history
  • get_memory
  • get_project_context
  • get_skill
  • get_stored_file_resource
  • get_tracking_campaign
  • get_tracking_summary
  • import_knowledge
  • knowledge_status
  • list_authorized_domains
  • list_authorized_recipients
  • list_due_jobs
  • list_email_accounts
  • list_email_attachments
  • list_execution_profiles
  • list_files
  • list_jobs
  • list_known_contacts
  • list_mailboxes
  • list_memories
  • list_open_events
  • list_owners
  • list_projects
  • list_skills
  • list_tracking_campaigns
  • list_tracking_deliveries
  • list_tracking_events
  • list_tracking_links
  • mailbox_status
  • mark_as_spam
  • mark_not_spam
  • move_email
  • pause_job
  • preview_schedule
  • read_email_attachment
  • read_text_file
  • recipient_authorization_status
  • reindex_knowledge
  • reply_email
  • restore_knowledge_revision
  • resume_job
  • revoke_domain
  • revoke_recipient
  • save_file
  • save_text_file
  • save_uploaded_file
  • save_uploaded_files
  • scheduler_status
  • search_emails
  • search_knowledge
  • send_email
  • set_amp_account_state
  • set_email_seen
  • test_email_account
  • tracking_status
  • update_file_metadata
  • update_job
  • update_memory
  • update_skill
  • validate_amp_email
code evidence vv9.8.1 · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 169

filesystem 78

  • fs (weak) the-code-learner-mail-task-mcp-server-d1f965b/scripts/prepare_context_model.py :7 import shutil
  • fs the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/account_store.py :9 from pathlib import Path
  • fs the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/confirmation_v967.py :13 from pathlib import Path
  • fs the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/delivery_reliability.py :14 from pathlib import Path
  • fs the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/email_analytics.py :12 from pathlib import Path
  • fs the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/email_privacy_v963.py :17 from pathlib import Path
  • fs the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/file_handoff.py :9 from pathlib import Path
  • fs the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/file_store.py :13 from pathlib import Path
  • fs the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/knowledge_scopes.py :8 from pathlib import Path
  • fs the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/mail_extensions.py :19 from pathlib import Path
  • fs the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/mailbox_cache_v963.py :13 from pathlib import Path
  • fs the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/outbound_operations_v969.py :13 from pathlib import Path
show 28 more
  • fs the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/outbound_safety.py :10 from pathlib import Path
  • fs the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/pending_approval_v969.py :10 from pathlib import Path
  • fs the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/runtime_control.py :10 from pathlib import Path
  • fs the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/runtime_v963.py :6 from pathlib import Path
  • fs the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/runtime_v967.py :4 from pathlib import Path
  • fs the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/scheduler_engine.py :11 from pathlib import Path
  • fs the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/semantic_engine.py :5 from pathlib import Path
  • fs the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/server.py :10 from pathlib import Path
  • fs the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/structured_data_v980.py :14 from pathlib import Path
  • fs the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/unsubscribe.py :8 from pathlib import Path
  • fs the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/webgui_release_identity.py :3 from pathlib import Path
  • fs (weak) the-code-learner-mail-task-mcp-server-d1f965b/tests/test_file_store.py :6 from pathlib import Path
  • fs (weak) the-code-learner-mail-task-mcp-server-d1f965b/tests/test_knowledge_store.py :5 from pathlib import Path
  • fs (weak) the-code-learner-mail-task-mcp-server-d1f965b/tests/test_v9_1_file_tools.py :7 from pathlib import Path
  • fs (weak) the-code-learner-mail-task-mcp-server-d1f965b/tests/test_v9_2_1_update_policy.py :5 from pathlib import Path
  • fs (weak) the-code-learner-mail-task-mcp-server-d1f965b/tests/test_v9_2_native_upload.py :8 from pathlib import Path
  • fs (weak) the-code-learner-mail-task-mcp-server-d1f965b/tests/test_v9_3_file_handoff.py :9 from pathlib import Path
  • fs (weak) the-code-learner-mail-task-mcp-server-d1f965b/tests/test_v9_4_1_provider_classification.py :6 from pathlib import Path
  • fs (weak) the-code-learner-mail-task-mcp-server-d1f965b/tests/test_v9_4_2_follow_up.py :9 from pathlib import Path
  • fs (weak) the-code-learner-mail-task-mcp-server-d1f965b/tests/test_v9_4_3_task_visibility.py :4 from pathlib import Path
  • fs (weak) the-code-learner-mail-task-mcp-server-d1f965b/tests/test_v9_4_4_webgui_task_correction.py :10 from pathlib import Path
  • fs (weak) the-code-learner-mail-task-mcp-server-d1f965b/tests/test_v9_4_5_webgui_project_ux.py :6 from pathlib import Path
  • fs (weak) the-code-learner-mail-task-mcp-server-d1f965b/tests/test_v9_4_6_stored_file_attachments.py :8 from pathlib import Path
  • fs (weak) the-code-learner-mail-task-mcp-server-d1f965b/tests/test_v9_4_6_tracked_file_download.py :9 from pathlib import Path
  • fs (weak) the-code-learner-mail-task-mcp-server-d1f965b/tests/test_v9_4_link_tracking_store.py :6 from pathlib import Path
  • fs (weak) the-code-learner-mail-task-mcp-server-d1f965b/tests/test_v9_4_runtime.py :7 from pathlib import Path
  • fs (weak) the-code-learner-mail-task-mcp-server-d1f965b/tests/test_v9_4_sent_clean.py :10 from pathlib import Path
  • fs (weak) the-code-learner-mail-task-mcp-server-d1f965b/tests/test_v9_5_1_webgui_foundation.py :6 from pathlib import Path

38 more not shown — this panel samples each group; the count above is the real total.

shell / exec 4

  • shell (weak) the-code-learner-mail-task-mcp-server-d1f965b/tests/test_v9_6_0_release_contracts.py :5 import subprocess
  • shell (weak) the-code-learner-mail-task-mcp-server-d1f965b/tests/test_v9_6_6_worker_provisioning_node.py :4 import subprocess
  • shell (weak) the-code-learner-mail-task-mcp-server-d1f965b/tests/test_v9_6_6_worker_state_node.py :4 import subprocess
  • shell (weak) the-code-learner-mail-task-mcp-server-d1f965b/tests/test_webgui_v970.py :17 import subprocess

network 51

  • net (weak) the-code-learner-mail-task-mcp-server-d1f965b/scripts/prepare_context_model.py :10 import urllib.request
  • net the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/delivery_reliability.py :7 import socket
  • net the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/email_inventory_v963.py :5 from urllib.parse import parse_qsl, unquote, urlparse
  • net the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/email_privacy_v963.py :19 from urllib.parse import parse_qsl, urlencode, urlparse, urlunparse
  • net the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/file_handoff.py :10 from urllib.parse import quote, urlsplit
  • net the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/inbound_inspection_html.py :7 from urllib.parse import urlparse
  • net the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/inbound_inspection_urls.py :3 from urllib.parse import parse_qsl, unquote, urlencode, urlparse, urlunparse
  • net the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/link_tracking.py :9 from urllib.parse import SplitResult, urlsplit
  • net the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/link_tracking_html.py :7 from urllib.parse import urlsplit, urlunsplit
  • net the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/mail_health.py :3 import socket
  • net the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/mail_v950.py :18 from urllib.parse import urlparse
  • net the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/privacy_cache_v969.py :10 from urllib.parse import urlencode, urlparse
show 28 more
  • net the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/privacy_css_v969.py :8 from urllib.parse import urlencode, urljoin, urlparse
  • net the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/privacy_provisioning_v966.py :9 import socket
  • net the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/remote_file.py :6 import socket
  • net the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/runtime_control.py :9 import urllib.request
  • net the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/runtime_v968.py :5 from urllib.parse import quote, urlencode
  • net the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/server.py :12 from urllib.parse import quote, urlencode
  • net the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/stored_file_delivery.py :8 from urllib.parse import quote, urlsplit
  • net the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/stored_file_public_v972.py :10 from urllib.parse import parse_qs, quote, unquote, urlsplit
  • net the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/unsubscribe.py :9 from urllib.parse import urljoin
  • net the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/update_status.py :8 import urllib.request
  • net the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/webgui_helpers.py :7 from urllib.parse import urlencode
  • net the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/webgui_mail_files_v971.py :8 from urllib.parse import quote, urlencode
  • net the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/webgui_projects_ux_v971.py :6 from urllib.parse import urlencode
  • net the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/webgui_structured_data_v980.py :6 from urllib.parse import urlencode
  • net the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/webgui_v951.py :7 from urllib.parse import urlencode
  • net the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/webgui_v952.py :5 from urllib.parse import urlencode
  • net the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/webgui_v953.py :6 from urllib.parse import urlencode
  • net the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/webgui_v960.py :8 from urllib.parse import urlencode
  • net the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/webgui_v962_views.py :5 from urllib.parse import urlencode
  • net the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/webgui_v963.py :11 from urllib.parse import urlencode
  • net the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/webgui_v963_high_noise.py :5 from urllib.parse import urlencode
  • net the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/webgui_v964.py :5 from urllib.parse import urlencode
  • net the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/webgui_v969.py :8 from urllib.parse import urlencode
  • net (weak) the-code-learner-mail-task-mcp-server-d1f965b/tests/test_v9_2_native_upload.py :11 import httpx
  • net (weak) the-code-learner-mail-task-mcp-server-d1f965b/tests/test_v9_3_file_handoff.py :11 from urllib.parse import parse_qs, urlsplit
  • net (weak) the-code-learner-mail-task-mcp-server-d1f965b/tests/test_v9_5_1_webgui_foundation.py :7 from urllib.parse import urlencode
  • net (weak) the-code-learner-mail-task-mcp-server-d1f965b/tests/test_v9_5_1_webgui_redesign.py :7 from urllib.parse import urlencode
  • net (weak) the-code-learner-mail-task-mcp-server-d1f965b/tests/test_v9_5_2_webgui_browser_flows.py :5 from urllib.parse import parse_qs

11 more not shown — this panel samples each group; the count above is the real total.

secrets 3

  • secrets the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/account_store.py :178 password = os.getenv("MAIL_PASSWORD", "")
  • secrets the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/file_handoff.py :79 configured = os.getenv("FILE_STORE_DOWNLOAD_SECRET", "").strip()
  • secrets the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/mail_bridge.py :59 password = os.getenv("MAIL_PASSWORD", "")

database 22

  • db the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/account_store.py :5 import sqlite3
  • db the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/confirmation_v967.py :10 import sqlite3
  • db the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/delivery_reliability.py :8 import sqlite3
  • db the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/email_analytics.py :8 import sqlite3
  • db the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/email_privacy_v963.py :10 import sqlite3
  • db the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/file_store.py :9 import sqlite3
  • db the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/knowledge_scopes.py :5 import sqlite3
  • db the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/knowledge_store.py :6 import sqlite3
  • db the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/mail_extensions.py :10 import sqlite3
  • db the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/mailbox_cache_v963.py :6 import sqlite3
  • db the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/outbound_operations_v969.py :6 import sqlite3
  • db the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/outbound_safety.py :6 import sqlite3
show 10 more
  • db the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/pending_approval_v969.py :7 import sqlite3
  • db the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/scheduler_engine.py :6 import sqlite3
  • db the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/structured_data_v980.py :9 import sqlite3
  • db (weak) the-code-learner-mail-task-mcp-server-d1f965b/tests/test_v9_6_2_projects_performance.py :4 import sqlite3
  • db (weak) the-code-learner-mail-task-mcp-server-d1f965b/tests/test_v9_6_3_high_noise.py :4 import sqlite3
  • db (weak) the-code-learner-mail-task-mcp-server-d1f965b/tests/test_v9_6_3_inbox_privacy.py :307 import sqlite3
  • db (weak) the-code-learner-mail-task-mcp-server-d1f965b/tests/test_v9_6_9_pending_ambiguity.py :5 import sqlite3
  • db (weak) the-code-learner-mail-task-mcp-server-d1f965b/tests/test_v9_6_9_privacy_pending.py :4 import sqlite3
  • db (weak) the-code-learner-mail-task-mcp-server-d1f965b/tests/test_v9_6_9_reply_mapping.py :3 import sqlite3
  • db (weak) the-code-learner-mail-task-mcp-server-d1f965b/tests/test_v9_8_0_structured_data.py :7 import sqlite3

tool registrations 93

  • build_status the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/runtime_core.py :48
  • follow_up_email the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/runtime_core.py :52
  • create_follow_up_draft the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/runtime_core.py :83
  • get_stored_file_resource the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/runtime_core.py :107
  • tracking_status the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/runtime_core.py :130
  • get_tracking_campaign the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/runtime_core.py :146
  • get_tracking_summary the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/runtime_core.py :150
  • list_tracking_links the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/runtime_core.py :164
  • list_tracking_events the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/runtime_core.py :181
  • build_status the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/server.py :114
  • list_email_accounts the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/server.py :143
  • test_email_account the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/server.py :149
show 28 more
  • amp_account_status the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/server.py :155
  • set_amp_account_state the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/server.py :164
  • validate_amp_email the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/server.py :185
  • mailbox_status the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/server.py :197
  • list_mailboxes the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/server.py :219
  • search_emails the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/server.py :225
  • get_email the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/server.py :246
  • list_known_contacts the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/server.py :252
  • list_email_attachments the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/server.py :259
  • get_email_attachment the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/server.py :265
  • read_email_attachment the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/server.py :281
  • email_security_status the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/server.py :298
  • recipient_authorization_status the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/server.py :332
  • list_authorized_recipients the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/server.py :338
  • list_authorized_domains the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/server.py :344
  • authorize_domain the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/server.py :350
  • revoke_domain the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/server.py :356
  • authorize_recipient the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/server.py :362
  • revoke_recipient the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/server.py :368
  • tracking_status the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/server.py :375
  • list_tracking_campaigns the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/server.py :381
  • get_tracking_campaign the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/server.py :387
  • list_tracking_deliveries the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/server.py :393
  • list_open_events the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/server.py :410
  • send_email the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/server.py :433
  • reply_email the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/server.py :469
  • create_draft the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/server.py :501
  • create_reply_draft the-code-learner-mail-task-mcp-server-d1f965b/src/postmaster/server.py :525

53 more not shown — this panel samples each group; the count above is the real total.

declared dependencies 16

  • mcp@>=2,<3
  • uvicorn@>=0.30,<1
  • starlette@>=0.45,<1
  • httpx@>=0.28,<1
  • dnspython@>=2.6,<3
  • croniter@>=2,<7
  • tzdata@>=2025.1
  • pypdf@>=5,<7
  • cryptography@>=45,<51
  • model2vec@==0.8.2
  • numpy@>=1.26,<3
  • safetensors@>=0.4,<1
show 4 more
  • huggingface-hub@>=0.24,<2
  • tokenizers@>=0.20,<1
  • mistune@>=3,<4
  • bleach@>=6.2,<7