Expo Docs MCP服务器
用于Expo文档的快速MCP(模型上下文协议)服务器,可直接从本地读取 .mdx 文件夹。
🚀 主要特点
- 迅速的:直接从本地读取
.mdx文件-不需要HTTP服务器 - 智能缓存:基于磁盘的缓存,版本+文档指纹无效
- 全文检索:强大的搜索功能和智能评分算法
- 零网络:完全离线工作
- 针对Bun进行了优化:专为Bun的表演而打造
📊 演出
| 指标 | 首次运行 | 缓存运行 |
|---|---|---|
| 索引构建 | ~90-120ms | ~12-20ms |
| 搜索查询 | ~1-10ms | ~1-10ms |
| 文档 | 997.mdx文件 | 997.mtx文件 |
| 缓存大小 | ~4.4MB | ~4.4MB |
在当前本地文档快照上测量。
🛠️ 设置
选择您喜欢的安装方法:
选项1:npx(零安装)
无需安装!只需添加到您的Cursor MCP配置中:
{
"mcpServers": {
"expo-docs": {
"command": "npx",
"args": ["expo-local-docs-mcp"]
}
}
}✅ 始终使用最新版本\ ✅ 无需手动更新\ ⚠️ 首次运行时略有延迟(之后缓存)
选项2:全局安装(推荐)
安装一次,随处使用:
npm install -g expo-local-docs-mcp
# or with pnpm
pnpm install -g expo-local-docs-mcp然后添加到光标MCP配置中:
{
"mcpServers": {
"expo-docs": {
"command": "expo-local-docs-mcp"
}
}
}✅ 即时启动(无需下载)\ ✅ 更清洁的配置\ ⚠️ 手动更新: npm update -g expo-local-docs-mcp
选项3:本地项目安装
在项目中安装:
cd ~/my-expo-project
npm install expo-local-docs-mcp然后添加到光标MCP配置中:
{
"mcpServers": {
"expo-docs": {
"command": "node",
"args": [
"/absolute/path/to/node_modules/expo-local-docs-mcp/dist/server.js"
]
}
}
}✅ 版本已锁定到项目\ ⚠️ 必须按项目安装\ ⚠️ 配置中需要绝对路径
______________________________________________________________________
就是这样!该包在当前快照中包含997 Expo SDK文档,可以使用任何方法开箱即用。
贡献者:地方发展
如果你想贡献或定制:
先决条件
- 包子 已安装(推荐)或Node.js
- 世博会文件
.mdx文件在expo-sdk/文件夹
安装
cd /path/to/expo-local-docs-mcp
bun install
bun run build测试它是否有效
bun run test您应该看到:
✅ All tests passed!
✓ Index loaded: 997 entries (~90-120ms first run)
✓ Index loaded: 997 entries (~12-20ms cached run)本地开发配置
添加到光标MCP配置(~/.cursor/mcp.json 或 ~/.config/cursor/mcp.json):
{
"mcpServers": {
"expo-docs": {
"command": "bun",
"args": ["//expo-local-docs-mcp/dist/server.js"],
"env": {
"EXPO_DOCS_PATH": "//expo-local-docs-mcp/expo-sdk",
"EXPO_CACHE_DIR": "//expo-local-docs-mcp/.expo-cache"
}
}
}
}重要:更新路径以匹配您的实际安装位置。
📚 可用工具
1. search_expo_docs
使用智能排名搜索世博会文件。
参数:
query(字符串,必填):搜索查询section(字符串,可选):按部分筛选(例如,“指南”、“路由器”、“版本”)maxResults(数字,可选):最大结果(默认值:10)
例子:
{
"query": "camera permissions",
"section": "guides",
"maxResults": 5
}2. get_expo_doc_content
获取特定文档页面的完整内容。
参数:
path(string,必填):文档路径(例如。,/versions/latest/sdk/camera)
例子:
{
"path": "/get-started/introduction"
}3. list_expo_sections
列出所有文档部分或在特定部分获取文档。
参数:
section(string,可选):获取此部分中的文档
例子:
{
"section": "router"
}4. get_expo_api_reference
获取特定Expo SDK模块的API参考资料。
参数:
module(字符串,必填):模块名称(例如,“相机”、“世博会相机”)version(字符串,可选):SDK版本(例如,“最新”、“v55.0.0”或“55.0.0”)
例子:
{
"module": "camera"
}5. get_expo_quick_start
获取快速入门文档。
参数:
topic(字符串,可选):特定主题(例如,“创建项目”)
例子:
{
"topic": "create-a-project"
}🏗️ 建筑
expo-local-docs-mcp/
├── src/
│ ├── server.ts # MCP server implementation
│ ├── config.ts # Configuration management
│ ├── diskCache.ts # Disk cache management
│ ├── mdxParser.ts # MDX file parser (frontmatter + content)
│ ├── searchIndex/ # Search index module
│ │ ├── index.ts # Public API exports
│ │ ├── types.ts # TypeScript types
│ │ ├── state.ts # Index state management
│ │ ├── loader.ts # Index building and loading
│ │ ├── search.ts # Search algorithm
│ │ ├── query.ts # Document queries
│ │ └── fileUtils.ts # File system utilities
│ └── tools/ # MCP tool handlers
│ ├── definitions.ts # Tool schemas
│ └── handlers/ # Tool implementations
│ ├── index.ts # Handler dispatcher
│ ├── types.ts # Handler types
│ ├── searchExpoDocs.ts
│ ├── getExpoDocContent.ts
│ ├── listExpoSections.ts
│ ├── getExpoApiReference.ts
│ └── getExpoQuickStart.ts
├── expo-sdk/ # Your Expo documentation .mdx files
│ ├── get-started/
│ ├── guides/
│ ├── router/
│ ├── versions/
│ └── ...
├── .expo-cache/ # Generated cache (auto-created)
│ └── search-index.json
├── dist/ # Built server
│ └── server.js
├── test-server.ts # Basic functionality tests
├── test-tools.ts # Comprehensive tool tests
└── package.json🔧 发展
# Run in development mode
bun run dev
# Build for production
bun run build
# Start built server
bun run start
# Run tests
bun run test
bun run test:tools
bun run test:all
# Clear cache (force rebuild)
bun run clear-cache🎯 环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
EXPO_DOCS_PATH | ./expo-sdk | 包含.mdx文件的exposdk文件夹的路径 |
EXPO_CACHE_DIR | ./.expo-cache | 缓存目录位置 |
EXPO_DOCS_MAX_RESULTS | 20 | 要返回的最大搜索结果数 |
EXPO_DOCS_CACHE_MAX_AGE | 86400000 | 缓存时间(毫秒)(24小时) |
📦 依赖项
@modelcontextprotocol/sdk-MCP协议实现@types/node-TypeScript Node.js类型typescript-TypeScript编译器
就是这样! 没有HTTP客户端,没有HTML解析器,只有快速的文件I/O。
🐛 故障排除
指数未建立
- 确保
expo-sdk/文件夹存在并包含.mdx文件 - 检查目录上的文件权限
- 尝试
bun run clear-cache并重新启动
搜索未返回任何结果
- 等待索引构建(检查控制台输出)
- 验证.mdx文件是否有内容
- 尝试更广泛的搜索词
每次缓存重建
- 检查
.expo-cache/文件夹权限 - 验证是否正在创建缓存文件:
ls -lh .expo-cache/ - 检查磁盘空间
“找不到模块”错误
- 跑
bun install确保安装了依赖项 - 跑
bun run build重建
📝 运作原理
- 初创公司:服务器初始化并尝试从磁盘缓存加载
- 缓存检查:缓存仅在版本、年龄和文档指纹都匹配时有效(通常加载约12-20ms)
- 新建:如果没有有效的缓存,则进行扫描
expo-sdk/递归为所有.mdx文件(当前997个文件) - 解析:提取YAML frontmatter并剥离MDX/JSX以获得干净的文本内容
- 索引:使用路径映射构建内存中的搜索索引(~90-120ms)
- 缓存:将完整索引保存到
search-index.json(~4.4MB) - 搜索:使用优化的评分算法(精确匹配>单词匹配)
MDX解析
每 .mdx 解析文件的frontmatter:
---
title: Camera
description: A React component that renders a preview...
packageName: expo-camera
platforms: ["android", "ios", "web"]
---此元数据用于更好的搜索结果和过滤。
搜索评分算法
搜索使用双层评分系统以获得最大相关性:
精确短语匹配:
- 标题包含精确的查询: 1000分
- 描述包含精确的查询: 500分
- 路径包含精确查询: 300分
- 内容包含精确查询: 100分
单个单词匹配(带边界检测):
- 标题中的单词匹配: 50分 每次发生
- 描述中的单词匹配: 25分 每次发生
- 路径中的单词匹配: 15分 每次发生
- 内容中的单词匹配: 1分 每次发生
性能优化:
- 为每个搜索词预编译转义正则表达式模式
- 用途
for...of循环而不是.map()为了获得更好的性能 - 仅为匹配的条目(得分>0)创建评分对象
- 具有早期分段滤波的单通道算法
🔄 更新文档
要更新Expo文档,请执行以下操作:
- 替换/更新中的文件
expo-sdk/文件夹 - 清除缓存:
bun run clear-cache - 重新启动MCP服务器
索引将在下次启动时自动重建。
❓ 常见问题解答
Q: 我应该使用npx还是全局安装?\ A: 全局安装(npm install -g)建议使用,以实现更快的启动和更清晰的配置。如果要自动更新,请使用npx。
Q: 如何更新到最新版本?\ A.
- npx:自动(始终使用最新版本)
- 全球:
npm update -g expo-local-docs-mcp - 本地:
npm update expo-local-docs-mcp在您的项目中
Q: 如何测试npx执行?\ A: 快跑 npx expo-local-docs-mcp 直接在您的终端。它应该启动stdio上的MCP服务器。
Q: 我需要运行localhost:3002服务器吗?\ A: 不!那是旧的v1.x架构。v2.0直接读取文件。
Q: 我可以删除缓存文件夹吗?\ A: 是的!它将自动重建(通常为90-120ms)。缓存位置:
- npm/npx:
/tmp/expo-local-docs-mcp-cache/(macOS/Linux) - 本地开发人员:
.expo-cache/(项目根)
Q: 如果.mdx文件丢失怎么办?\ A: 服务器优雅地跳过它,并继续为其他文件建立索引。
Q: 我可以用Node.js代替Bun吗?\ A: 是的!npm包是为与Node.js配合使用而构建的。本地开发可以使用Bun或Node。
Q: npm包有多大?\ A: 这取决于所包含的文档快照。当前回购快照索引997 .mdx 文档并构建一个~4.4MB的缓存文件。
📈 索引内容
Total documents: 997 .mdx files
Total sections: 40
Cache size: ~4.4MB
Top sections:
- versions: 602 docs (SDK API references)
- guides: 59 docs
- router: 47 docs (Expo Router)
- eas: 35 docs (EAS services)
- eas-update: 27 docs
- tutorial: 25 docs
- develop: 21 docs
- build-reference: 21 docs
- archive: 18 docs
- modules: 17 docs🎉 优势与v1.x
| 功能 | v1.x(HTTP) | v2.0(文件) |
|---|---|---|
| 速度(初跑) | 5-10s | 90-120ms |
| 速度(缓存) | 1-2s | 12-20ms |
| 需要网络 | 是 | 否 |
| 依赖关系 | axios,cheerio | 无 |
| 需要HTTP服务器 | 是(本地主机:3002) | 否 |
| 离线支持 | 否 | 是 |
| 搜索质量 | 良好 | 更好 |
📄 许可证
麻省理工学院
🤝 贡献
这是一个针对本地世博会文档访问进行了优化的个人MCP服务器。请随意分叉并适应您的需求!
______________________________________________________________________
版本: 2.0.5\ 内置于:Bun+TypeScript\ 演出: 🚀 快速燃烧
