Finans-Mail-MCP

Finans-Mail-MCP

MCP server that exposes a Microsoft 365 mailbox via the Model Context Protocol, enabling AI assistants to search, read, and download emails and attachments, and optionally send mail.

Category
访问服务器

README

Outlook MCP Sunucusu

Microsoft 365 posta kutusunu MCP (Model Context Protocol) üzerinden internete açan, tek başına çalışan bir Node servisi. Claude Desktop bu sunucuya bağlanıp posta kutusunda arama yapabilir, mesajları okuyabilir, ekleri indirebilir ve (açıkça izin verilirse) mail gönderebilir.

Ana projeden (parasut-ops-panel) tamamen bağımsızdır: Replit'e özgü hiçbir SDK kullanmaz, kendi package.json dosyası vardır. Render, Railway, Fly veya yeni bir Replit projesinde aynen çalışır.


1. Önce şunu bilin: hangi posta kutusuna erişilebilir?

Bu sunucu app-only (client credentials) kimlik doğrulaması kullanır. Microsoft 365 tenant'ında bir ApplicationAccessPolicy hangi kutulara app-only erişilebileceğini sınırlar. Test edilmiş güncel durum:

Posta kutusu App-only okuma App-only gönderme
finans@rsresearch.net ✅ Çalışıyor ❌ 403
omererdogan@rsresearch.net ❌ 403 (Access is denied) ❌ 403

Yani bu sunucu bulutta bir yerde çalıştığında yalnızca finans@ kutusunu okuyabilir.

omererdogan@ kutusunu da okumak istiyorsanız iki seçenek var:

  1. Tenant yöneticisinden politikayı genişletmesini isteyin. Doğru çözüm budur ve sunucuda hiçbir kod değişikliği gerektirmez. Yöneticinin çalıştıracağı komut (Exchange Online PowerShell):

    # Mevcut politikayı gör
    Get-ApplicationAccessPolicy | Format-List AppId,PolicyScopeGroupId,AccessRight
    
    # İzin verilen kullanıcı grubuna omererdogan@ ekleyin (grup adı tenant'a göre değişir)
    Add-DistributionGroupMember -Identity "<mcp-izinli-kutular-grubu>" `
      -Member omererdogan@rsresearch.net
    
    # Doğrulama
    Test-ApplicationAccessPolicy -Identity omererdogan@rsresearch.net -AppId <AZURE_CLIENT_ID>
    

    Sonuç AccessCheckResult: Granted dönerse MCP_MAILBOXES listesine adresi ekleyip servisi yeniden başlatmanız yeterli.

  2. Yalnızca finans@ ile devam edin. Hiçbir şey yapmanıza gerek yok, varsayılan bu.

Gönderme (MCP_ALLOW_SEND) varsayılan olarak kapalıdır ve açsanız bile finans@ kutusundan app-only gönderim 403 döner. Gönderim gerekiyorsa Azure uygulamasına Mail.Send Application izni verilmeli, admin onayı alınmalı ve erişim politikası o kutuyu kapsamalıdır.


2. Araçlar

Araç Ne yapar
list_mailboxes Erişilebilen kutuları, varsayılan tarih penceresini ve yazma iznini döner
list_folders Klasörleri iki seviye derinliğe kadar, id değerleriyle listeler
search_mail E-posta arar (klasör, tarih aralığı, gönderen, alıcı, konu, ek filtresi)
get_message Tek mesajın tam gövdesini döner (varsayılan düz metin)
list_attachments Ekleri ad/tür/boyut ile listeler
get_attachment Eki base64 içerikle indirir
send_mail Mail gönderir — yalnızca MCP_ALLOW_SEND=true ise kayıtlı olur

search_mail hakkında bilmeniz gereken iki şey

a) İki mod vardır ve araç otomatik seçer.

  • query, to veya subject verilirse → metin arama modu (Graph KQL). Bu modda Graph sonuçları alaka düzeyine göre sıralar, tarihe göre değil; tarih sınırı da gün hassasiyetindedir.
  • Yalnızca tarih / from / hasAttachments verilirse → filtre modu. Sonuçlar en yeniden en eskiye sıralanır.

Bu ayrım Graph'ın bir kısıtından geliyor: $search ile $filter ve $orderby aynı istekte kullanılamaz.

b) Sonuçlar sayfalıdır. Varsayılan tarih penceresi son 730 gün (~2 yıl). Tek çağrıda en fazla 100 mesaj döner. Devamı için dönen nextCursor değerini bir sonraki çağrıda cursor parametresine geçirin. Claude bunu kendiliğinden yapar; siz sadece "devam et" demeniz yeterli.


3. Yerelde çalıştırma

cd mcp-outlook
cp .env.example .env      # değerleri doldurun
npm install
npm run build
npm start

Sağlık kontrolü: curl http://localhost:5000/healthz

MCP_AUTH_TOKEN üretmek için: openssl rand -hex 32


4. Render.com'a kurulum (adım adım)

Render seçilmesinin sebebi: bu Replit projesinin cloud_run dağıtımı askıya alınmış durumda ve açılması Replit Support gerektiriyor.

  1. Kodu GitHub'a gönderin. Render bir Git reposundan deploy eder. Bu klasörün içeriği kendi başına bir deponun kökü olacak şekilde tasarlandı: package.json, render.yaml ve src/ doğrudan kökte durmalı. Sarmalayıcı bir mcp-outlook/ klasörünün içine koymayın — Render blueprint'i yalnızca depo kökünde arar.

    Yine de daha büyük bir deponun alt klasörü olarak tutmak isterseniz: render.yaml dosyasını depo köküne taşıyın ve içine rootDir: <klasör-adı> satırını ekleyin.

  2. Render panelinde New → Blueprint → repoyu seçin. Render kökteki render.yaml dosyasını okuyup servisi hazırlar.

    Blueprint kullanmak istemezseniz New → Web Service ile elle de kurabilirsiniz:

    Alan Değer
    Root Directory (boş bırakın — depo kökü)
    Runtime Node
    Build Command npm ci && npm run build
    Start Command npm start
    Health Check Path /healthz
  3. Ortam değişkenlerini girin (Render → servis → Environment):

    Anahtar Değer
    AZURE_TENANT_ID Ana projedekiyle aynı
    AZURE_CLIENT_ID Ana projedekiyle aynı
    AZURE_CLIENT_SECRET Ana projedekiyle aynı
    MCP_AUTH_TOKEN openssl rand -hex 32 çıktısı
    MCP_MAILBOXES finans@rsresearch.net

    PORT girmeyin — Render kendisi enjekte eder.

  4. Deploy'u bekleyin, sonra doğrulayın:

    curl https://<servis-adi>.onrender.com/healthz
    

    {"status":"ok",...} görmelisiniz.

  5. Planı seçerken dikkat: Render'ın ücretsiz katmanı 15 dakika boştan sonra servisi uyutur; uyandırma 30–60 saniye sürer ve Claude bu sürede zaman aşımına düşebilir. Düzenli kullanacaksanız ücretli (Starter) plan gerekir. render.yaml içinde plan: starter yazılıdır.

Alternatif: yeni bir Replit projesi

mcp-outlook klasörünü yeni bir Replit projesine kopyalayın, aynı ortam değişkenlerini Secrets olarak girin (PORT=5000), çalıştırma komutunu npm run build && npm start yapın ve projeyi Autoscale Deployment olarak yayınlayın. Adres https://<proje>.replit.app/mcp olur. Adımlar aynıdır.


5. Claude Desktop'a bağlama

claude_desktop_config.json dosyası yalnızca stdio sunucuları kabul eder. Doğrudan "url": "..." yazarsanız Claude Desktop girdiyi sessizce siler. Bu yüzden mcp-remote adlı köprüyü kullanıyoruz: Claude Desktop ile stdio, sunucumuzla Streamable HTTP konuşur.

Dosyanın yeri:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

İçerik:

{
  "mcpServers": {
    "outlook": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://<servis-adi>.onrender.com/mcp",
        "--transport",
        "http-only",
        "--header",
        "Authorization:${AUTH_HEADER}"
      ],
      "env": {
        "AUTH_HEADER": "Bearer BURAYA_MCP_AUTH_TOKEN"
      }
    }
  }
}

Üç ayrıntı önemli:

  • Authorization:${AUTH_HEADER} ifadesinde iki nokta üst üste sonrasında boşluk yoktur. Claude Desktop argümanlardaki boşlukları bozar; bu yüzden token'ı env içine koyup değişken olarak enjekte ediyoruz. Bearer kelimesi env değerinin içindedir.
  • --transport http-only şart: bu sunucu stateless çalışır, SSE akışı sunmaz. Bu bayrak olmadan mcp-remote önce SSE deneyip gereksiz yere bekler.
  • Node 18+ kurulu olmalı (npx bunun için gerekli).

Kaydedin ve Claude Desktop'ı tamamen kapatıp yeniden açın. Ayarlar → Connectors altında outlook görünmeli ve araçlar listelenmelidir.

Deneyin: "finans kutusunda son 6 ayda gönderilen, konusunda fatura geçen mailleri listele."

Claude.ai (tarayıcı) veya mobil uygulama

Web arayüzündeki "Custom Connector" özelliği bearer token değil OAuth 2.0 bekler. Bu sunucu OAuth uygulamaz, dolayısıyla Claude.ai üzerinden doğrudan bağlanamazsınız. Masaüstü uygulaması + mcp-remote yolunu kullanın.


6. Güvenlik

  • MCP_AUTH_TOKEN bir paroladır. Onu bilen herkes MCP_MAILBOXES listesindeki kutuların tamamını okuyabilir. Sohbete, ekran görüntüsüne veya repoya yazmayın.
  • MCP_MAILBOXES bir güvenlik sınırıdır. Azure app-only token teknik olarak tenant'taki her kutuya erişebilir; sunucu her istekte gelen adresi bu listeye karşı doğrular ve listede olmayanı reddeder. Listeyi dar tutun.
  • Yazma varsayılan olarak kapalıdır. MCP_ALLOW_SEND=true yapmadıkça send_mail aracı Claude'a hiç gösterilmez.
  • Token'ı değiştirmeniz gerekirse Render'da değeri güncelleyin, servisi yeniden başlatın ve claude_desktop_config.json içindeki değeri de güncelleyin.

7. Sorun giderme

Belirti Sebep ve çözüm
401 Yetkisiz Token yanlış veya Bearer öneki eksik. env.AUTH_HEADER değeri Bearer ile başlamalı.
Graph erişimi reddedildi (403) Kutu app-only erişime kapalı. Bölüm 1'deki tabloya ve PowerShell adımlarına bakın.
An identifier was expected at position 0 Arama metninde tırnak/parantez vardı. Sunucu bunları temizler; görüyorsanız sürüm eskidir, yeniden derleyin.
Claude Desktop'ta sunucu görünmüyor Config'e "url" yazılmış olabilir — o satırı silin, mcp-remote biçimini kullanın ve uygulamayı tam kapatıp açın.
İlk istek zaman aşımına uğruyor Render ücretsiz katmanı servisi uyutmuş. Starter plana geçin veya bir kez curl /healthz ile uyandırın.
Graph hız sınırı aşıldı (429) Çok hızlı sayfalama yapıldı. Kısa bir süre bekleyip devam edin.
Sonuçlar tarih sırasında değil Metin arama modundasınız (query/to/subject verilmiş). Tarih sıralaması istiyorsanız bu alanları boş bırakın.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选