microsoft-outlook-mcp について
microsoft-outlook-mcpは、Microsoft Graph経由でMicrosoft Outlookのメール操作をMCPクライアントに提供します。ローカルとホスト環境に対応し、委任アクセス用のサインインとトークン管理を備えています。
主な機能
- 01Outlookメールの読み取り、検索、送信
- 02Microsoft Graph v1.0ツールのラッパー
- 03stdioまたはStreamable HTTPで実行
- 04サイントークンをキャッシュし自動更新
- 05読み取り専用・破壊的ツールをクライアントに通知
活用シーン
- 01MCPクライアントからOutlookメールを検索
- 02Microsoft Graph経由でメールを送信
- 03ローカルまたはホスト型MCPクライアントをOutlookに接続
MCP 対応
stdioまたはStreamable HTTPで、14個のOutlookツールをMCPクライアントに提供します。Microsoft Graphアクセストークンを使用し、stdioでは組み込みのサインインとリフレッシュトークンのキャッシュに対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y microsoft-outlook-mcpMICROSOFT_CLIENT_IDEntra ID application (client) ID for the public client app used to sign in. Run `npx -y microsoft-outlook-mcp login` once to cache a refresh token.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
14掲載時のツール一覧 · 2 週間前に更新
このツールにパラメーターはありません。
詳細
![]()
Microsoft MCP
Microsoft 365 向けの Model Context Protocol サーバーです。
カレンダー · 連絡先 · OneDrive · Outlook · SharePoint — 公式の
@modelcontextprotocol/sdk
を使用し、stdio または Streamable HTTP で動作します。
各サーバーは実際の MCP プロトコルを使用し、次のいずれかのトランスポートで動作します。
- stdio — サーバーをサブプロセスとして起動するローカル MCP クライアント向けです(Claude Desktop、IDE、MCP Inspector)。
- Streamable HTTP — リモート/ホスト環境向けです。Microsoft Graph アクセストークンは、リクエストごとに
Authorization: Bearerを介して渡します。
サーバー
| サーバー | npm パッケージ(およびバイナリ) | ツール | |
|---|---|---|---|
| カレンダー | ms-calendar-mcp | 9 | |
| 連絡先 | ms-contacts-mcp | 7 | |
| OneDrive | ms-onedrive-mcp | 9 | |
| Outlook | microsoft-outlook-mcp | 14 | |
| SharePoint | ms-sharepoint-mcp | 23 |
すべてのツールは、Microsoft Graph v1.0 API を薄くラップしたものです。
構成
microsoft-mcp/
├── apps/ # one MCP server per Microsoft 365 product
│ ├── calendar/
│ ├── contacts/
│ ├── onedrive/
│ ├── outlook/
│ └── sharepoint/
│ └── src/
│ ├── tools.ts # declarative tool definitions (schema + handler)
│ └── index.ts # run({ name, version }, tools)
└── packages/ # shared building blocks
├── core/ # MCP server bootstrap + dual transport (stdio / HTTP)
├── graph/ # Microsoft Graph HTTP client
├── validation/ # id / path / query sanitizers
└── logger/ # structured JSON logging (stderr-only — stdio-safe)
サーバーは、run() に渡すツールのリストだけで構成されています。
// apps/calendar/src/index.ts
import { run } from "@microsoft-mcp/core";
import { tools } from "./tools.js";
void run({ name: "microsoft-calendar", version: "1.0.0", title: "Microsoft Calendar" }, tools);
// a single tool
defineTool({
name: "get_event",
description: "Get a single calendar event by ID.",
inputSchema: { event_id: z.string().describe("Event ID") },
confirmationPolicy: "never",
handler: ({ graph }, { event_id }) => {
validateId(event_id, "event_id");
return graph.request("GET", `/me/events/${event_id}`);
},
});
confirmationPolicy(変更/破壊的なツールでは "always"、読み取り専用では "never")は、MCP の readOnlyHint/destructiveHint アノテーションとしてクライアントに公開されます。
必要条件
- Node.js >= 20
- pnpm 10(
corepack enable)
セットアップ
pnpm install
pnpm build # build all servers (turbo) -> apps/*/dist/index.js
pnpm check-types # typecheck everything
テストと CI
pnpm test # run the vitest suite once
pnpm test:watch # watch mode
pnpm test:coverage # run with a v8 coverage report (-> coverage/)
テストはコードと同じ場所に *.test.ts として置かれ、TypeScript ソースを直接実行します(ビルド手順は不要です)。共有の packages/* は、稼働中のサーバーに対する Streamable HTTP の完全なラウンドトリップを含め、ユニットテストと統合テストでカバーされており、CI ではカバレッジの最低基準を適用しています。各 apps/* サーバーには、不変条件を検証するテストスイートが含まれ、ツールの構成(重複のない snake_case 名、有効なスキーマと確認ポリシー)を固定しています。
master へのプッシュとプルリクエストのたびに、CI が実行されます。内容は、型チェック → ビルド → カバレッジ付きテストです。カバレッジバッジは実行結果から再生成されます。
認証
Microsoft アカウントで一度だけサインインすれば、以降サーバーがリフレッシュトークンをキャッシュし、アクセストークンをバックグラウンドで取得します。トークンを貼り付ける必要も、1 時間で期限切れになることもありません。サインインには、独自の Microsoft Entra ID アプリ登録(無料)を使用するため、サーバーはユーザーに代わって動作します。
1. Entra ID アプリを登録する(初回のみ)
-
Azure ポータル → Microsoft Entra ID → アプリの登録 → 新規登録。任意の名前を付け、用途に合ったサポートされているアカウントの種類(シングルテナント、マルチテナント、個人用アカウントなど)を選択します。
-
認証 → プラットフォームの追加 → モバイル アプリケーションとデスクトップ アプリケーション → リダイレクト URI
http://localhostを追加し、パブリック クライアント フローを許可するをはいに設定します(--device-codeによるフォールバックを有効にします)。 -
API のアクセス許可 → アクセス許可の追加 → Microsoft Graph → 委任されたアクセス許可 → 使用するサーバーのスコープを追加します(テナントで必要な場合は、管理者の同意を与えます)。
サーバー 委任されたスコープ Calendar Calendars.ReadWriteContacts Contacts.ReadWriteOneDrive Files.ReadWrite.AllOutlook Mail.ReadWrite、Mail.SendSharePoint Sites.ReadWrite.Allすべてのサーバーで
User.Readも使用します(更新用のoffline_accessは自動的に要求されます)。 -
アプリケーション(クライアント)ID をコピーします。
2. サインインする(マシンごとに初回のみ)
MICROSOFT_CLIENT_ID を設定し、サーバーの login コマンドを実行します。ブラウザーが開くので、同意すると、トークンが ~/.config/microsoft-mcp/ にキャッシュされます。
export MICROSOFT_CLIENT_ID=<your-client-id>
npx -y ms-calendar-mcp login # opens the browser
npx -y ms-calendar-mcp login --device-code # headless: shows a code to enter
以降、サーバーがトークンを自動的に更新します。既定以外のテナントを使用するには、MICROSOFT_TENANT_ID を設定します(既定値は common)。
詳細設定:独自のトークンを指定する
組み込みのフローを使わず、事前に取得した Graph トークンを直接指定できます。
- stdio:
MICROSOFT_ACCESS_TOKENを設定します(キャッシュされたサインインより優先されます)。簡単なテストに便利です。az account get-access-token --resource https://graph.microsoft.com --query accessToken -o tsvを使ってトークンを取得できます。 - HTTP: 各
POST /mcpリクエストにAuthorization: Bearer <token>を指定します。各リクエストは個別のトークンを使用するステートレスな処理のため、呼び出し元の間で認証情報が共有されることはありません。これは、独自の認証処理を行うホスト型/リモート環境向けの方式です。
実行方法
stdio(例:Claude Desktop)
各サーバーは npm で公開されており、npx で実行できます。リポジトリのクローンやビルドは不要です。先に一度サインインしてから(npx -y ms-calendar-mcp login。[認証](#authentication)を参照)、次を実行します。
// claude_desktop_config.json
{
"mcpServers": {
"microsoft-calendar": {
"command": "npx",
"args": ["-y", "ms-calendar-mcp"],
"env": { "MICROSOFT_CLIENT_ID": "<your-client-id>" }
}
}
}
npm の代わりにローカルのビルドを指定することもできます。
{
"command": "node",
"args": ["/abs/path/microsoft-mcp/apps/calendar/dist/index.js"],
"env": { "MICROSOFT_CLIENT_ID": "<your-client-id>" }
}
開発中は、ビルドを省略して TypeScript を直接実行できます。
MICROSOFT_ACCESS_TOKEN=<token> pnpm --filter ms-calendar-mcp dev
Streamable HTTP
# build first, then:
PORT=3000 node apps/calendar/dist/index.js --http
# or, in dev:
pnpm --filter ms-calendar-mcp dev -- --http --port 3000
サーバーは POST /mcp(MCP エンドポイント)と GET /healthz を公開します。任意の Streamable HTTP 対応 MCP クライアントから、Authorization: Bearer ヘッダーを指定して http://localhost:3000/mcp に接続します。
トランスポートの選択
次の優先順位で決定されます:--stdio / --http フラグ → MCP_TRANSPORT=stdio|http → 既定値の stdio。
HTTP ポート:--port <n> → PORT → 3000。
環境変数
| 変数 | 使用対象 | 説明 |
|---|---|---|
MICROSOFT_CLIENT_ID | stdio | サインイン用の Entra ID アプリ(クライアント)ID。login フローに必須です。 |
MICROSOFT_TENANT_ID | stdio | サインインするテナント:common(既定値)、organizations、consumers、またはテナント ID。 |
MICROSOFT_ACCESS_TOKEN | stdio | 事前に取得した Graph トークン。設定すると、キャッシュされたサインインより優先されます。 |
MICROSOFT_MCP_CACHE_DIR | stdio | トークンキャッシュのディレクトリを上書きします(既定値 ~/.config/microsoft-mcp)。 |
MCP_TRANSPORT | 両方 | stdio(既定値)または http。 |
PORT | http | リッスンするポート(既定値 3000)。 |
MCP_HTTP_BODY_LIMIT | http | リクエスト本文の最大サイズ(既定値 50mb)。Base64 アップロードに使用します。 |
MCP_DEBUG | 両方 | 空でない値を設定すると、デバッグログを有効にします(stderr に出力)。 |
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。