A self-hosted email and task control plane for MCP-compatible AI agents.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
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
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