mcpField
M
ms-onedrive-mcp

ms-onedrive-mcp

ローカル
github.com/0xka13bファイル・ストレージ020 週間前に更新

ms-onedrive-mcp について

ms-onedrive-mcpは、Microsoft 365ストレージを使うユーザー向けに、OneDriveのファイルやフォルダーを操作するツールをMCPクライアントへ提供します。Microsoft Graph v1.0をラップする9つのツールを備え、stdioとStreamable HTTPに対応します。

主な機能

  1. 01Microsoft GraphのOneDriveツール9種
  2. 02ファイルとフォルダーの閲覧・読み取り・管理
  3. 03stdioとStreamable HTTPに対応
  4. 04サインイン情報のキャッシュとトークン更新
  5. 05ツールポリシーをMCPアノテーションで提示

活用シーン

  1. 01OneDriveのファイルやフォルダーを閲覧
  2. 02OneDriveドキュメントの読み取りや管理

MCP 対応

Microsoft GraphのOneDriveツール9種をMCPクライアントに公開します。stdioとStreamable HTTPに対応し、HTTPリクエストではAuthorization: BearerでGraphトークンを渡します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"0xka13b-ms-onedrive": {
"command": "npx",
"args": [
"-y",
"ms-onedrive-mcp"
],
"env": {
"MICROSOFT_CLIENT_ID": "<MICROSOFT_CLIENT_ID>"
}
}
}
}
起動コマンドnpx -y ms-onedrive-mcp
設定が必要な環境変数
MICROSOFT_CLIENT_IDEntra ID application (client) ID for the public client app used to sign in. Run `npx -y ms-onedrive-mcp login` once to cache a refresh token.

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmms-onedrive-mcp1.0.1

ツール

9

掲載時のツール一覧 · 2 週間前に更新

このツールにパラメーターはありません。

詳細

Outlook  カレンダー  OneDrive  SharePoint  連絡先

Microsoft MCP

Microsoft 365 向けの Model Context Protocol サーバーです。
カレンダー · 連絡先 · OneDrive · Outlook · SharePoint — 公式の @modelcontextprotocol/sdk を使用し、stdio または Streamable HTTP で動作します。

CI coverage license: MIT node MCP SDK

各サーバーは実際の MCP プロトコルを使用し、次のいずれかのトランスポートで動作します。

  • stdio — サーバーをサブプロセスとして起動するローカル MCP クライアント向けです(Claude Desktop、IDE、MCP Inspector)。
  • Streamable HTTP — リモート/ホスト環境向けです。Microsoft Graph アクセストークンは、リクエストごとに Authorization: Bearer を介して渡します。

サーバー

サーバーnpm パッケージ(およびバイナリ)ツール
README の画像カレンダーms-calendar-mcp9
README の画像連絡先ms-contacts-mcp7
README の画像OneDrivems-onedrive-mcp9
README の画像Outlookmicrosoft-outlook-mcp14
README の画像SharePointms-sharepoint-mcp23

すべてのツールは、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 アプリを登録する(初回のみ)
  1. Azure ポータル → Microsoft Entra ID → アプリの登録 → 新規登録。任意の名前を付け、用途に合ったサポートされているアカウントの種類(シングルテナント、マルチテナント、個人用アカウントなど)を選択します。

  2. 認証 → プラットフォームの追加 → モバイル アプリケーションとデスクトップ アプリケーション → リダイレクト URI http://localhost を追加し、パブリック クライアント フローを許可するをはいに設定します(--device-code によるフォールバックを有効にします)。

  3. API のアクセス許可 → アクセス許可の追加 → Microsoft Graph → 委任されたアクセス許可 → 使用するサーバーのスコープを追加します(テナントで必要な場合は、管理者の同意を与えます)。

    サーバー委任されたスコープ
    CalendarCalendars.ReadWrite
    ContactsContacts.ReadWrite
    OneDriveFiles.ReadWrite.All
    OutlookMail.ReadWrite、Mail.Send
    SharePointSites.ReadWrite.All

    すべてのサーバーで User.Read も使用します(更新用の offline_access は自動的に要求されます)。

  4. アプリケーション(クライアント)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_IDstdioサインイン用の Entra ID アプリ(クライアント)ID。login フローに必須です。
MICROSOFT_TENANT_IDstdioサインインするテナント:common(既定値)、organizations、consumers、またはテナント ID。
MICROSOFT_ACCESS_TOKENstdio事前に取得した Graph トークン。設定すると、キャッシュされたサインインより優先されます。
MICROSOFT_MCP_CACHE_DIRstdioトークンキャッシュのディレクトリを上書きします(既定値 ~/.config/microsoft-mcp)。
MCP_TRANSPORT両方stdio(既定値)または http。
PORThttpリッスンするポート(既定値 3000)。
MCP_HTTP_BODY_LIMIThttpリクエスト本文の最大サイズ(既定値 50mb)。Base64 アップロードに使用します。
MCP_DEBUG両方空でない値を設定すると、デバッグログを有効にします(stderr に出力)。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。