SharePoint Browser MCP Server
Entra IDアプリ登録を使用せず、Microsoft Edgeの認証済みセッションからSharePoint Onlineへ読み取り専用で接続するオンプレMCPサーバーです。
Phase 1の認証状態確認、Phase 2の検索・ページ本文取得、Phase 3のファイルアクセス、Phase 4のPDF・Office文書本文抽出、Phase 5のSharePointサイト横断検索、Phase 6の文書構造検索、Phase 7の汎用検索・取得、Phase 8のSharePointリスト項目取得、Phase 9の最大20 MiB文書解析に加え、Phase 10では複数サイトの横断検索・取得に対応します。
目的
- Entra IDのアプリ登録、Client ID、Client Secret、証明書を使わない
- 利用者が通常どおりEdgeで完了したSSO・MFAセッションを再利用する
- 設定済みSharePointサイト群以外へアクセスしない
- SharePoint REST APIを読み取り専用で利用する
- Cookie、トークン、Authorizationヘッダーをアプリケーションへ取り出さない
対応範囲
- TypeScriptのstdio MCPサーバー
- MCP専用Edgeプロファイル
- 初回・再認証用のheadedログインコマンド
sharepoint_auth_statusMCPツール/_api/web/currentuserによる認証確認sharepoint_searchによる設定済みサイト群の横断検索、種類・フォルダー・拡張子・更新日による絞り込みsharepoint_get_pageによるSitePages内の.aspxページ本文取得sharepoint_list_document_librariesによる可視ドキュメントライブラリ一覧sharepoint_list_folderによる直下フォルダー・ファイル一覧sharepoint_download_fileによる許可形式・5 MiB以下のファイル取得sharepoint_extract_document_textによるPDF・DOCX・XLSX・PPTX本文抽出sharepoint_get_document_outlineによるページ・見出し・シート・スライドの構造化sharepoint_search_documentによる1文書内のノード検索sharepoint_get_document_nodesによる選択ノードだけの本文取得searchとfetchによる汎用の読み取り専用検索・取得Lists/.../DispForm.aspx?ID=...で表されるSharePointリスト項目の本文取得BrowserContext.requestからページ内fetchへのフォールバック- 設定値、URL制約、レスポンス解析、認証判定、検索、ページ、ファイル、文書抽出の単体テスト
対象外
- リスト項目の汎用取得
- OCR、画像内文字認識
- 旧Officeバイナリ形式(DOC、XLS、PPT)
- 書き込み、アップロード、更新、削除
- OneDrive
- 公開HTTP MCPエンドポイントと一般公開プラグイン
動作要件
- Windows 10またはWindows 11
- Microsoft Edge
- Node.js 22以上
- 対象SharePointサイトへアクセスできる社内ネットワーク
- 対象SharePointサイトへアクセスできるユーザーアカウント
セットアップ
npm install
Copy-Item .env.example .env
.envを編集します。
SHAREPOINT_SITE_URL=https://tenant.sharepoint.com/sites/example
SHAREPOINT_ADDITIONAL_SITE_URLS=https://tenant.sharepoint.com/teams/another-site
SHAREPOINT_PROFILE_DIR=C:\Apps\SharePointBrowserMcp\edge-profile
SHAREPOINT_HEADLESS=true
LOG_LEVEL=info
SHAREPOINT_SITE_URLは主サイト、SHAREPOINT_ADDITIONAL_SITE_URLSは追加サイトをカンマ・セミコロン・改行区切りで指定します。いずれも同じSharePoint Onlineテナントの/sites/<name>または/teams/<name>である必要があります。テナントルート、OneDrive、任意のURLは受け付けません。
npm run login、npm run dev、npm startは、プロジェクト直下に.envがあれば自動的に読み込みます。
初回ログイン・再認証
npm run login
MCP専用プロファイルでEdgeが起動します。通常どおりSSO・MFAを完了し、対象SharePointサイトが表示されたことを確認してからEdgeを閉じます。
普段利用しているEdgeプロファイルをSHAREPOINT_PROFILE_DIRに指定しないでください。既知のEdge既定プロファイル配下は起動前に拒否します。
検証
npm run check
個別に実行する場合:
npm run typecheck
npm test
MCPサーバーの起動
開発時:
npm run dev
ビルド後:
npm run build
npm start
stdioクライアントの設定例:
{
"mcpServers": {
"sharepoint-browser": {
"command": "node",
"args": [
"C:\\Apps\\sharepoint-browser-mcp-server\\dist\\src\\index.js"
],
"env": {
"SHAREPOINT_SITE_URL": "https://tenant.sharepoint.com/sites/example",
"SHAREPOINT_ADDITIONAL_SITE_URLS": "https://tenant.sharepoint.com/teams/another-site",
"SHAREPOINT_PROFILE_DIR": "C:\\Apps\\SharePointBrowserMcp\\edge-profile",
"SHAREPOINT_HEADLESS": "true"
}
}
}
}
MCPツール
search / fetch
汎用の読み取り専用検索・取得ツールです。searchは設定済みSharePointサイト群から引用可能なページ、リスト項目、対応文書を横断検索し、fetchは返されたIDから対象サイトを選び、本文と引用URLを取得します。
search入力:querysearch出力:id、title、絶対urlを持つ最大10件のresultsfetch入力:searchが返したidfetch出力:id、title、text、url、metadata- 対応対象:
SitePagesの.aspx、Lists直下のDispForm.aspx?ID=...、PDF、DOCX、XLSX、PPTX - 規程・規則は文書ファイルとは限らないため、最初に正確な名称を
searchへ渡す
リスト項目取得はdocs/phase-8-list-item-fetch.mdを参照してください。
sharepoint_auth_status
設定済み全サイトに対する現在のEdgeセッション状態を確認します。全サイトが読める場合だけ全体状態をAUTHENTICATEDとし、サイト別状態も返します。
返却する状態:
| 状態 | 意味 |
|---|---|
AUTHENTICATED | SharePoint REST APIをユーザーコンテキストで利用できる |
LOGIN_REQUIRED | ログインまたは再認証が必要 |
ACCESS_DENIED | ログイン済みだが対象サイトへの権限がない |
SITE_NOT_FOUND | 対象サイトが存在しない、またはURL設定が誤っている |
UNAVAILABLE | ネットワーク、プロキシ、SharePoint側の障害などで確認できない |
MCP結果には、表示名とサイトURLだけを含めます。メールアドレス、ログイン名、Cookie、トークン、レスポンス本文は返しません。
sharepoint_search
SharePoint自身の検索インデックスを使い、設定済み全サイト配下のページとファイルを横断検索します。
- 必須入力:
query - サイト限定: 任意の
siteUrl。省略時は全設定サイトを検索 - 件数・ページング:
maxResults(1〜20、既定値10)、startRow(0〜50,000) - 対象限定:
scope(all、pages、documents)、任意のfolderUrl - 絞り込み:
fileExtensions(最大10種類)、modifiedAfter、modifiedBefore - 並び順:
relevanceまたはmodified-desc - 出力: タイトル、URL、結果種別、親URL、ファイル拡張子、コンテンツ種別、更新日時、短い要約、ページング情報
- 複数サイト検索のページングでは
siteUrlまたはfolderUrlで1サイトに限定 - 検索APIの結果に設定サイト群外のURLが含まれても、MCP結果から除外
kind=pageのURLはsharepoint_get_page、対応するkind=documentのURLはsharepoint_extract_document_textへ渡せる
sharepoint_get_page
設定済みサイト群のSitePagesライブラリにある.aspxページから、作成済み本文をプレーンテキストで取得します。
- 入力: 絶対URLまたはサーバー相対URL
- 出力: タイトル、URL、更新日時、本文、切り詰め有無
- 本文は最大50,000文字
- 生の
CanvasContent1HTML、Webパーツ設定、スクリプト、スタイルは返却しない - 動的Webパーツが実行時に表示するデータは対象外
sharepoint_list_document_libraries
設定済み全サイト内の非表示ではないドキュメントライブラリと、そのルートフォルダーURLを返します。任意のsiteUrlで1サイトに限定できます。
sharepoint_list_folder
指定フォルダー直下のフォルダーとファイルを、それぞれ最大100件まで返します。
- 入力: 絶対URLまたはサーバー相対URL、任意の
maxResults(1〜100、既定値50) - 出力: 名前、URL、サイズ、更新日時、バージョン、ダウンロード可否
- 設定サイト群外や直接の子ではない応答項目を除外
sharepoint_download_file
設定済みサイト群内の許可形式ファイルをMCPの埋め込みバイナリresourceとして返します。
- 最大5 MiB
- 対応形式: PDF、DOCX、XLSX、PPTX、TXT、Markdown、CSV、JSON、XML、BMP、GIF、JPEG、PNG、WebP
- 実行形式、スクリプト、HTML、SVG、マクロ有効Office形式、その他の形式は拒否
- SharePointメタデータと実データのサイズを照合
- SHA-256をメタデータとして返却
sharepoint_extract_document_text
設定済みサイト群のPDF・DOCX・XLSX・PPTXを取得し、プレーンテキストとして返します。
- 解析元ファイルは最大20 MiB
- 抽出本文は最大100,000文字
- PDFは最大200ページ
- DOCXは本文、ヘッダー、フッター、脚注、文末脚注を抽出
- XLSXはシート名とセルの保存値を抽出
- PPTXはスライド本文と対応可能なスピーカーノートを抽出
- Office ZIPは最大1,000部品、対象XML 1部品2 MiB、対象XML合計8 MiB
- PDF内の文書アクションやOfficeマクロは実行しない
- スキャンPDFのOCR、数式・図形・画像の意味解析、Excel数式の再計算は行わない
sharepoint_get_document_outline
PDF・DOCX・XLSX・PPTXを共通ノードへ変換し、短いプレビューを持つアウトラインを返します。
- PDFはページ単位
- Wordは見出し階層と補助部品単位
- Excelはシート単位
- PowerPointはスライド単位
- 各ノードに安定した形式別IDと根拠位置を付与
- 外部LLM呼び出しやローカルへの自動保存は行わない
sharepoint_search_document
1つのPDF・Office文書内を検索し、関連ノードのID、根拠位置、スコア、短いスニペットを返します。
- 検索語は1〜200文字
- 最大20件、既定値10件
- スコアは同一文書・同一呼び出し内の順位付け専用
sharepoint_get_document_nodes
アウトラインまたは文書内検索で得たノードIDを最大20件指定し、その部分だけの本文を返します。合計本文は最大100,000文字です。前回結果のsha256をexpectedSha256へ渡すと、探索中に文書が更新された場合は取得を拒否します。
セキュリティ境界
- 対象は設定済みSharePoint Onlineサイト群のみ(最大10サイト、同一テナント)
- REST要求は対象サイト配下の
/_api/のみ - ページ取得は各設定サイトの
SitePages配下にある.aspxだけを許可 - リスト項目取得は各設定サイトの
Lists/<リスト名>/DispForm.aspxと単一の正の整数IDだけを許可 - 検索結果URLを再検証し、設定サイト群外の結果を除外
- 検索対象フォルダー、拡張子、更新日の入力を検証し、検索結果の親URLもサイト境界と照合
- フォルダー・ファイルURLとSharePoint応答パスを再検証
- MCP resourceとして返すバイナリは許可形式と5 MiB上限を満たす場合だけ返却
- PDF・Office文書の解析元ファイルは20 MiBまで許可し、元バイナリ自体はMCP応答へ含めない
- Office ZIPは展開前後のサイズと部品数を制限し、DOCTYPE・ENTITYを拒否
- 抽出本文を100,000文字に制限
- 構造化ノードは最大500件、選択ノードは最大20件
- 文書アウトライン、文書内検索、選択本文を外部LLMや永続インデックスへ送信・保存しない
- OneDrive、テナントルート、任意URLを拒否
- MCPツールは読み取り専用、非破壊、冪等として宣言
- Cookieやトークンを独自ファイルへエクスポートしない
- HTTPエラー時のHTML本文を読み取らない
- ログは標準エラーへ出力し、標準出力はMCPプロトコル専用とする
詳細はdocs/phase-1-authentication.md、
docs/phase-2-sharepoint-read.md、
docs/phase-3-file-access.md、
docs/phase-4-document-text.md、
docs/phase-5-site-search.md、
docs/phase-6-document-structure.md、
docs/phase-8-list-item-fetch.md、
docs/phase-9-large-document-processing.md、
docs/phase-10-multi-site.mdを参照してください。