🚀 MCP Agent Mail
MCP Agent Mail 是一個專為編碼代理設計的類郵件協調層,以僅支持 HTTP 的 FastMCP 服務器形式呈現。它為代理提供了易於記憶的身份、收件箱/發件箱、可搜索的消息歷史記錄,以及自願的文件保留“租約”,以避免相互干擾。
🚀 快速開始
一鍵安裝
curl -fsSL https://raw.githubusercontent.com/Dicklesworthstone/mcp_agent_mail/main/scripts/install.sh | bash -s -- --yes
上述命令會執行以下操作:
- 若缺少
uv 則進行安裝,並在當前會話中更新 PATH。
- 創建 Python 3.14 虛擬環境,並使用
uv 安裝依賴項。
- 運行自動檢測集成,以連接支持的代理工具。
- 在端口 8765 上啟動 MCP HTTP 服務器,並打印一個掩碼令牌。
- 在
scripts/ 目錄下創建輔助腳本(包括 run_server_with_token.sh)。
若你想指定特定位置或選項,可添加如 --dir <path>、--project-dir <path>、--no-start、--start-only、--port <number> 或 --token <hex> 等標誌。
若遇到端口衝突:可使用 --port 指定不同的端口(默認端口為 8765):
curl -fsSL https://raw.githubusercontent.com/Dicklesworthstone/mcp_agent_mail/main/scripts/install.sh | bash -s -- --port 9000 --yes
uv run python -m mcp_agent_mail.cli config set-port 9000
手動安裝
克隆倉庫,在 Python 3.14 虛擬環境中使用 uv 進行設置和安裝(若沒有 uv,需先進行安裝),然後運行 scripts/automatically_detect_all_installed_coding_agents_and_install_mcp_agent_mail_in_all.sh。這將自動為你安裝的各種編碼代理工具進行設置,並在端口 8765 上啟動 MCP 服務器。若你日後想再次運行 MCP 服務器,只需運行 scripts/run_server_with_token.sh:
curl -LsSf https://astral.sh/uv/install.sh | sh
export PATH="$HOME/.local/bin:$PATH"
git clone https://github.com/Dicklesworthstone/mcp_agent_mail
cd mcp_agent_mail
uv python install 3.14
uv venv -p 3.14
source .venv/bin/activate
uv sync
scripts/automatically_detect_all_installed_coding_agents_and_install_mcp_agent_mail_in_all.sh
scripts/run_server_with_token.sh
uv run python -m mcp_agent_mail.cli config set-port 9000
✨ 主要特性
- 身份管理:為編碼代理提供臨時但持久的身份,便於識別和跟蹤。
- 消息傳遞:支持發送和接收包含圖像的 GitHub 風格 Markdown 消息,方便信息交流。
- 搜索與彙總:可對對話進行搜索、彙總和線程化管理,提高信息檢索效率。
- 文件保留:允許代理聲明對文件或文件通配符的保留租約,避免衝突。
- 目錄查看:可查看活動代理、程序/模型和活動的目錄,瞭解整體情況。
💻 使用示例
基礎用法
curl -fsSL https://raw.githubusercontent.com/Dicklesworthstone/mcp_agent_mail/main/scripts/install.sh | bash -s -- --yes
高級用法
curl -fsSL https://raw.githubusercontent.com/Dicklesworthstone/mcp_agent_mail/main/scripts/install.sh | bash -s -- --port 9000 --yes
📚 詳細文檔
集成 Beads(依賴感知任務規劃)
Beads 是一個輕量級任務規劃器(bd CLI),它與 Agent Mail 互補,將狀態和依賴關係集中管理,而 Agent Mail 負責消息傳遞、文件保留和審計跟蹤。項目地址:steveyegge/beads
網頁界面(面向人類的郵件查看器)
服務器提供了一個輕量級、服務器渲染的網頁界面,供人類使用。你可以瀏覽項目、代理、收件箱、單個消息、附件、文件保留信息,並在支持 FTS5 時進行全文搜索(自動回退到 LIKE 查詢)。
靜態郵箱導出(共享和分發存檔)
share 命令組可將項目的郵箱導出為一個便攜式、只讀的捆綁包,任何人都可以在瀏覽器中查看。這適用於審計人員、利益相關者或團隊成員,他們可以在不啟動完整 MCP Agent Mail 堆棧的情況下瀏覽線程、搜索歷史記錄或證明交付時間線。
🔧 技術細節
核心架構
- HTTP 服務器:僅支持 HTTP 的 FastMCP 服務器,採用可流式 HTTP 協議,不使用 SSE 和 STDIO。
- 持久化模型:採用雙持久化模型,將人類可讀的 Markdown 文件存儲在每個項目的 Git 倉庫中,同時使用 SQLite 進行快速搜索、目錄查詢和文件保留/租約管理。
- 查詢方式:採用“目錄/LDAP”風格的查詢方式,為代理提供易於記憶的形容詞 + 名詞名稱。
- 文件保留:提供諮詢性的文件保留功能,可選擇使用預提交鉤子來強制執行。
- 資源層:提供方便的讀取資源層,如
resource://inbox/{agent}。
數據模型(SQLite)
projects(id, human_key, slug, created_at)
agents(id, project_id, name, program, model, task_description, inception_ts, last_active_ts, attachments_policy, contact_policy)
messages(id, project_id, sender_id, thread_id, subject, body_md, created_ts, importance, ack_required, attachments)
message_recipients(message_id, agent_id, kind, read_ts, ack_ts)
file_reservations(id, project_id, agent_id, path_pattern, exclusive, reason, created_ts, expires_ts, released_ts)
agent_links(id, a_project_id, a_agent_id, b_project_id, b_agent_id, status, reason, created_ts, updated_ts, expires_ts)
project_sibling_suggestions(id, project_a_id, project_b_id, score, status, rationale, created_ts, evaluated_ts, confirmed_ts, dismissed_ts)
fts_messages(message_id UNINDEXED, subject, body) + 觸發器用於增量更新
📄 許可證
文檔中未提及相關信息。
📋 配置參考
| 名稱 |
默認值 |
描述 |
STORAGE_ROOT |
~/.mcp_agent_mail_git_mailbox_repo |
每個項目的倉庫和 SQLite 數據庫的根目錄 |
HTTP_HOST |
127.0.0.1 |
HTTP 傳輸的綁定主機 |
HTTP_PORT |
8765 |
HTTP 傳輸的綁定端口 |
HTTP_PATH |
/mcp/ |
MCP 端點掛載的 HTTP 路徑 |
HTTP_JWT_ENABLED |
false |
啟用 JWT 驗證中間件 |
HTTP_JWT_SECRET |
|
HS* 算法的 HMAC 密鑰(開發環境) |
HTTP_JWT_JWKS_URL |
|
用於公鑰驗證的 JWKS URL |
HTTP_JWT_ALGORITHMS |
HS256 |
允許的算法的 CSV 列表 |
HTTP_JWT_AUDIENCE |
|
預期的 aud(可選) |
HTTP_JWT_ISSUER |
|
預期的 iss(可選) |
HTTP_JWT_ROLE_CLAIM |
role |
包含角色的 JWT 聲明名稱 |
HTTP_RBAC_ENABLED |
true |
強制執行只讀與工具的 RBAC |
HTTP_RBAC_READER_ROLES |
reader,read,ro |
讀者角色的 CSV 列表 |
HTTP_RBAC_WRITER_ROLES |
writer,write,tools,rw |
寫者角色的 CSV 列表 |
HTTP_RBAC_DEFAULT_ROLE |
reader |
無角色時使用的角色 |
HTTP_RBAC_READONLY_TOOLS |
health_check,fetch_inbox,whois,search_messages,summarize_thread,summarize_threads |
只讀工具名稱的 CSV 列表 |
HTTP_RATE_LIMIT_ENABLED |
false |
啟用令牌桶限流器 |
HTTP_RATE_LIMIT_BACKEND |
memory |
memory 或 redis |
HTTP_RATE_LIMIT_PER_MINUTE |
60 |
舊的每個 IP 的限制(回退) |
HTTP_RATE_LIMIT_TOOLS_PER_MINUTE |
60 |
工具調用的每分鐘限制 |
HTTP_RATE_LIMIT_TOOLS_BURST |
0 |
工具的可選突發限制(0 = 自動 = rpm) |
HTTP_RATE_LIMIT_RESOURCES_PER_MINUTE |
120 |
資源讀取的每分鐘限制 |
HTTP_RATE_LIMIT_RESOURCES_BURST |
0 |
資源的可選突發限制(0 = 自動 = rpm) |
HTTP_RATE_LIMIT_REDIS_URL |
|
用於多工作進程限制的 Redis URL |
HTTP_REQUEST_LOG_ENABLED |
false |
打印請求日誌(Rich + JSON) |
LOG_JSON_ENABLED |
false |
輸出 structlog JSON 日誌 |
INLINE_IMAGE_MAX_BYTES |
65536 |
send_message 期間內聯 WebP 圖像的閾值(字節) |
CONVERT_IMAGES |
true |
將圖像轉換為 WebP(並可選地內聯小圖像) |
KEEP_ORIGINAL_IMAGES |
false |
除了 WebP 之外,還存儲原始圖像字節(附件/原始文件/) |
LOG_LEVEL |
INFO |
服務器日誌級別 |
HTTP_CORS_ENABLED |
false |
啟用 CORS 中間件 |
HTTP_CORS_ORIGINS |
|
允許的源的 CSV 列表(例如,https://app.example.com,https://ops.example.com) |
HTTP_CORS_ALLOW_CREDENTIALS |
false |
允許 CORS 上的憑證 |
HTTP_CORS_ALLOW_METHODS |
* |
允許的方法的 CSV 列表或 * |
HTTP_CORS_ALLOW_HEADERS |
* |
允許的頭的 CSV 列表或 * |
HTTP_BEARER_TOKEN |
|
靜態令牌(僅在 JWT 禁用時使用) |
HTTP_ALLOW_LOCALHOST_UNAUTHENTICATED |
true |
允許本地主機請求無需身份驗證(開發便利) |
HTTP_OTEL_ENABLED |
false |
啟用 OpenTelemetry 儀表化 |
OTEL_SERVICE_NAME |
mcp-agent-mail |
遙測服務名稱 |
OTEL_EXPORTER_OTLP_ENDPOINT |
|
OTLP 導出器端點 URL |
APP_ENVIRONMENT |
development |
環境名稱(開發/生產) |
DATABASE_URL |
sqlite+aiosqlite:///./storage.sqlite3 |
SQLAlchemy 異步數據庫 URL |
DATABASE_ECHO |
false |
調試時回顯 SQL 語句 |
GIT_AUTHOR_NAME |
mcp-agent |
Git 提交作者姓名 |
GIT_AUTHOR_EMAIL |
mcp-agent@example.com |
Git 提交作者電子郵件 |
LLM_ENABLED |
true |
啟用 LiteLLM 進行線程摘要和發現 |
LLM_DEFAULT_MODEL |
gpt - 5 - mini |
默認 LiteLLM 模型標識符 |
LLM_TEMPERATURE |
0.2 |
LLM 文本生成的溫度 |
LLM_MAX_TOKENS |
512 |
LLM 完成的最大令牌數 |
LLM_CACHE_ENABLED |
true |
啟用 LLM 響應緩存 |
LLM_CACHE_BACKEND |
memory |
LLM 緩存後端(memory 或 redis) |
LLM_CACHE_REDIS_URL |
|
LLM 緩存的 Redis URL(如果後端 = redis) |
LLM_COST_LOGGING_ENABLED |
true |
記錄 LLM API 成本和令牌使用情況 |
FILE_RESERVATIONS_CLEANUP_ENABLED |
false |
啟用過期文件保留的後臺清理 |
FILE_RESERVATIONS_CLEANUP_INTERVAL_SECONDS |
60 |
文件保留清理任務的間隔 |
FILE_RESERVATION_INACTIVITY_SECONDS |
1800 |
保留被視為過時之前的不活動閾值(秒) |
FILE_RESERVATION_ACTIVITY_GRACE_SECONDS |
900 |
最近郵件/文件系統/Git 活動的寬限期,以保持保留活動 |
FILE_RESERVATIONS_ENFORCEMENT_ENABLED |
true |
在衝突的文件保留時阻止消息寫入 |
ACK_TTL_ENABLED |
false |
啟用逾期 ACK 掃描(日誌/面板;見視圖/資源) |
ACK_TTL_SECONDS |
1800 |
逾期 ACK 的年齡閾值(秒) |
ACK_TTL_SCAN_INTERVAL_SECONDS |
60 |
逾期 ACK 的掃描間隔 |
ACK_ESCALATION_ENABLED |
false |
啟用逾期 ACK 的升級 |
ACK_ESCALATION_MODE |
log |
log 或 file_reservation 升級模式 |
ACK_ESCALATION_CLAIM_TTL_SECONDS |
3600 |
升級文件保留的 TTL |
ACK_ESCALATION_CLAIM_EXCLUSIVE |
false |
使升級文件保留具有排他性 |
ACK_ESCALATION_CLAIM_HOLDER_NAME |
|
擁有升級文件保留的運維代理名稱 |
CONTACT_ENFORCEMENT_ENABLED |
true |
在消息傳遞之前強制執行聯繫策略 |
CONTACT_AUTO_TTL_SECONDS |
86400 |
自動批准的聯繫人的 TTL(1 天) |
CONTACT_AUTO_RETRY_ENABLED |
true |
在策略違規時自動重試聯繫請求 |
MESSAGING_AUTO_REGISTER_RECIPIENTS |
true |
在 send_message 期間自動創建缺失的本地收件人並重試路由 |
MESSAGING_AUTO_HANDSHAKE_ON_BLOCK |
true |
當聯繫策略阻止傳遞時,嘗試進行聯繫握手(自動接受)並重試 |
TOOLS_LOG_ENABLED |
true |
記錄工具調用以進行調試 |
LOG_RICH_ENABLED |
true |
啟用 Rich 控制檯日誌記錄 |
LOG_INCLUDE_TRACE |
false |
包括跟蹤級別的日誌 |
TOOL_METRICS_EMIT_ENABLED |
false |
定期發出工具使用指標 |
TOOL_METRICS_EMIT_INTERVAL_SECONDS |
60 |
指標發出的間隔 |
RETENTION_REPORT_ENABLED |
false |
啟用保留/配額報告 |
RETENTION_REPORT_INTERVAL_SECONDS |
3600 |
保留報告的間隔(1 小時) |
RETENTION_MAX_AGE_DAYS |
180 |
保留策略報告的最大年齡 |
QUOTA_ENABLED |
false |
啟用配額強制執行 |
QUOTA_ATTACHMENTS_LIMIT_BYTES |
0 |
每個項目的最大附件存儲(0 = 無限制) |
QUOTA_INBOX_LIMIT_COUNT |
0 |
每個代理的最大收件箱消息數(0 = 無限制) |
RETENTION_IGNORE_PROJECT_PATTERNS |
demo,test*,testproj*,testproject,backendproj*,frontendproj* |
保留/配額報告中忽略的項目模式的 CSV 列表 |
AGENT_NAME_ENFORCEMENT_MODE |
coerce |
代理命名策略:strict(拒絕無效的形容詞 + 名詞名稱),coerce(如果無效則自動生成),always_auto(始終自動生成) |