mcp-docs-template
An MCP server template that indexes markdown documents by heading and enables relevance-ranked full-text search using BM25, with tools to list, fetch, search, and reload documents.
README
mcp-docs-template
手元の md を Claude から関連度順に検索できるようにする MCP サーバのテンプレート。
docs/ に md を置くだけで、## 見出しごとに BM25 で索引化される。追加依存は mcp パッケージのみ、
索引は起動時にメモリ上に作るので DB もビルド手順も要らない。
devcontainer 込みなので、clone して開けば Claude Code と Codex がそのまま使える (claude-devcontainer-template と同じ構成)。
先に読むこと: 本当に MCP が要るか
完全一致で足りるなら Grep のほうが速い。 このサーバが効くのは次の2つが要るときだけ:
- 語を分けても拾える — 「節 検索」で検索すると、同梱の docs/example.md の
「検索のしかた」節が返る。
rg "節 検索"のほうは 0 件(連続していないと当たらない) - 関連度順の上位N件 — grep のヒット順はファイル順なので、100件当たったら100件読むことになる
さらに、Claude Code だけで使うなら Skill でも同じことができる。BM25 の実装(scripts/)は どちらの形でもそのまま使えるので、MCP を選ぶ理由は次のどちらかに絞られる:
| MCP にする | Skill で足りる | |
|---|---|---|
| 使う側 | Claude Desktop や他エディタからも使う | Claude Code だけ |
| コンテキスト | ツール定義が常時載る | description 1行だけ |
使い方
1. テンプレートから作る
GitHub の "Use this template"、またはローカルで:
git clone <this-repo> my-docs && cd my-docs && rm -rf .git && git init
2. md を置く
docs/ に置く。ファイル名が文書 id、本文の # 行がタイトルになる。
docs/example.md が形式の見本なので、確認したら消す。
元資料が Word / PowerPoint / Excel / PDF / Web ページなら、同梱の import-docs スキルに変換させる:
/import-docs この資料を取り込んで
検索の単位は ## 節なので、変換の主目的は意味のまとまりごとに見出しを付けることになる。
単にテキストを抜いただけでは索引が効かない。スキルはそこまで面倒を見る。
出典を残すなら先頭にフロントマターを書く。索引には入らない:
---
source: https://example.com/some-document
captured: 2026-01-01
---
節が検索の単位なので、見出しを細かく切るほど結果が絞り込まれる。見出しの無い長文は
1節として丸ごと返るため、長い資料は ## を入れてから置く。
3. コンテナを開く
VS Code で Dev Containers: Reopen in Container。pip install -r requirements.txt は
postCreateCommand が済ませる。
.mcp.json はプロジェクトスコープの設定なので、Claude Code が自動で読む。初回は
ワークスペースの信頼を尋ねられるので承認する。接続できているかは claude mcp list で分かる。
パスはリポジトリルートからの相対にしてある。絶対パスに書き換えるとディレクトリ名を変えたときに
壊れる。${workspaceFolder}(VS Code の変数)や ${CLAUDE_PROJECT_DIR} は .mcp.json では
展開されず、未定義の環境変数として警告になるので使わない。
4. 使う
list_documents() 索引している文書を出典つきで一覧
get_document(document, section) 指定文書の全文、または節だけ
search_docs(query, limit) 節単位で横断検索(関連度順)
reload_index() docs/ を読み直して索引を作り直す
資料を取り込む流れ
例として Word 文書を取り込む場合:
1. source/報告書.docx に置く
2. Claude に「source/報告書.docx を取り込んで」と頼む
→ import-docs スキルが起動し、pandoc で変換して ## 見出しを整え、
出典つきで docs/report.md を書く
3. Claude が reload_index() を呼ぶ
4. search_docs("...") で引けるようになる
3 を飛ばすと引けない。 索引は起動時にメモリ上に作るので、md を足しただけでは反映されない。
stdio の MCP サーバは Claude Code から再起動されないため、セッションを続けたまま反映するには
reload_index() を呼ぶ(スキルの手順にも入っている)。
リポジトリ外の md も索引する
個人メモなど、コミットしたくない md を足したいとき:
// .mcp.json
"env": { "MCP_EXTRA_DOCS_DIRS": "/path/to/notes:/path/to/more" }
os.pathsep(Linux では :)区切りで複数指定できる。docs/ と同じ形式で索引される。
中身は検索時に LLM へ渡る点に注意。
ツールを足す
scripts/mcp_server.py に @mcp.tool() を付けた関数を書くだけ。
型注釈と docstring がそのまま Claude 側のツール定義になるので、引数の説明は docstring の
Args: に書く。
@mcp.tool()
def count_sections(document: str) -> str:
"""指定した文書の節数を返す。
Args:
document: 文書id か タイトル(部分可)
"""
...
構成
docs/ 変換後の md。コミットする(索引対象)
source/ 変換元の .docx / .pptx / .xlsx / .pdf。gitignore 済みでコミットしない
scripts/ MCP サーバ本体
変換元をコミットしないのは、機密や著作物を公開リポジトリに入れる事故を防ぐため。 出所は変換後の md のフロントマターに残るので、URL のあるものは取り直せる。
| ファイル | 中身 |
|---|---|
| scripts/mcp_server.py | MCP サーバ本体、BM25、md のパース |
| scripts/common.py | パス解決、表記の正規化、bigram トークナイザ |
| .mcp.json | プロジェクトスコープの MCP サーバ登録 |
| .claude/skills/import-docs/ | 元資料を md に変換するスキル |
変換に使うもの(MCP の実行には不要。使うときだけ入れる):
| 形式 | 手段 |
|---|---|
| Word (.docx) | pandoc -t gfm |
| PowerPoint (.pptx) | 同梱の pptx_to_md.py(pandoc は pptx を読めない) |
| Excel (.xlsx) | 同梱の xlsx_to_md.py(同上) |
Read ツールでページを読んで書き起こす(抽出ツールより表の再現が効く) |
|
| Web | WebFetch |
検索の限界
形態素解析を使わない。英数字は単語、かな漢字は文字bigramに分割して BM25 にかけるだけなので、 辞書も追加依存も要らないかわりに次が効かない:
- 同義語や言い換え — 「価格」で「値段」は出ない
- 英数字・かな・漢字以外の文字。ハングルやキリル文字はトークンが空になり、
エラーも出さずに検索結果から消える。使うなら
common.pyの_CJK/_WORDを広げる
長い文書は get_document が全文を返さず節の一覧を返す(既定 8,000 文字超)。
資料1本でコンテキストを使い切らないための制限で、閾値は mcp_server.py の _MAX_FULL。
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。