mcp-docs-template

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.

Category
访问服务器

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 Containerpip install -r requirements.txtpostCreateCommand が済ませる。

.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(同上)
PDF Read ツールでページを読んで書き起こす(抽出ツールより表の再現が効く)
Web WebFetch

検索の限界

形態素解析を使わない。英数字は単語、かな漢字は文字bigramに分割して BM25 にかけるだけなので、 辞書も追加依存も要らないかわりに次が効かない:

  • 同義語や言い換え — 「価格」で「値段」は出ない
  • 英数字・かな・漢字以外の文字。ハングルやキリル文字はトークンが空になり、 エラーも出さずに検索結果から消える。使うなら common.py_CJK / _WORD を広げる

長い文書は get_document が全文を返さず節の一覧を返す(既定 8,000 文字超)。 資料1本でコンテキストを使い切らないための制限で、閾値は mcp_server.py_MAX_FULL

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选