1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VitePressをMCPサーバー化するVite Pluginを作りました

Posted at

概要

マークダウンで書いたドキュメントの検索MCPサーバーを簡単に構築できるようになりました!

背景

AIエージェントからプロダクトのドキュメントへアクセスしやすいように調整するため、MCPサーバーを導入することを検討していました。
ドキュメントはなるべくマークダウンで書くようにしていたこともあり、VitePressをよく使っていました。
VitePressにはminiSearchを利用した検索機能が搭載されており、全文検索でドキュメントを探すことが可能でした。
こちらの機能をMCPサーバーに提供することはできないかと思い、このプラグインを作成しました。

VitePressとは?

VitePressはマークダウンで書かれたドキュメントをお手軽にリッチドキュメントに変換してくれるライブラリです。
様々な便利なオプションが提供されており、導入しているOSSは多数あります。

導入している有名なOSS

使い方

  1. VitePressをセットアップ

  1. vite-plugin-vitepress-mcp をインストール
pnpm add vite-plugin-vitepress-mcp
  1. セットアップで作成された .vitepress/config.<ts|mts> に以下設定を追加
//.vitepress/config.mts

import { defineConfig } from "vitepress";
import { MCPPlugin } from "vite-plugin-vitepress-mcp";

export default defineConfig({
  title: "VitePress MCP Server",
  description: "Vitepress Search MCP",
  themeConfig: {
    search: {
      provider: "local",
      options: {}, //追加。ブランクでもカスタムしてもOK
    },
    ...
  },
  vite: {
    plugins: [MCPPlugin({ port: 4000 })], //追加
  },

portは自由に設定できます。

この設定を追加し、VitePressを起動するとMCPサーバーも同時に起動します。

スクリーンショット 2025-04-26 23.00.05.png

SSE? StreamableHTTP?

VitePress MCPは当初SSEでの実装を検討していましたが、今後MCPサーバーのスタンダードとなると言われているStreamable HTTPで実装することにしました。
まだ情報が少なかったり、公式ドキュメントの実装通りだとエラーになるなどのトラブルはありましたが、StreamableHTTPで実装している方のソースから学び、開発を進めていきました。

提供ツール

現在はドキュメントを検索するsearch_vitepress_docs のみ実装しています。
起動時、ホットリロードでインデックスを再生成しているため編集した内容はMCPサーバーですぐに検索できます。

スクリーンショット 2025-04-26 23.02.16.png

バグレポート

お気づきの点がありましたらGithubのIssueまでお願いします。

利用ライブラリ

  • MCP TypeScript SDK

  • miniSearch

  • Vite

  • express

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?