mcpserve ts

A. 模型上下文协议 TypeScript中的(MCP)服务器——通过stdio手动滚动JSON-RPC 2.0。为Claude等AI助手公开Git存储库工具和项目资源浏览。
特性
- 手动滚动MCP协议 --基于stdio的JSON-RPC 2.0,不依赖SDK
- 8工具 --Git操作、项目浏览、安全shell执行
- 3种资源类型 --文件内容、package.json、目录树
- 路径沙盒 --所有文件操作仅限于项目根目录
- Zod验证 --对每个工具调用进行严格的输入验证
- TypeScript严格 --零
any类型,全类型安全 - 最小依赖性 --只有
zod在运行时
快速开始
# Install
git clone https://github.com/devaloi/mcpserve-ts.git
cd mcpserve-ts
npm install
npm run build
# Run
PROJECT_ROOT=/path/to/your/project node dist/index.js
# Test
npm testClaude桌面配置
添加 ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"mcpserve-ts": {
"command": "node",
"args": ["/path/to/mcpserve-ts/dist/index.js"],
"env": {
"PROJECT_ROOT": "/path/to/your/project"
}
}
}
}工具
| 工具 | 说明 | 参数 |
|---|---|---|
git_status | 显示工作树状态 | path? |
git_diff | 显示阶段性或非阶段性更改 | path?, staged? |
git_log | 显示提交历史记录 | path?, limit? |
git_blame | 逐行显示作者身份 | file |
project_tree | 列出目录结构 | path?, depth? |
read_file | 读取文件内容 | path |
search_files | 使用正则表达式搜索 | pattern, path?, glob? |
run_command | 执行分配的命令 | command, args? |
壳牌许可清单
仅允许通过以下方式执行这些命令 run_command: ls, cat, wc, head, tail, find, grep
资源
| URI | 描述 | MIME类型 |
|---|---|---|
file:///{path} | 项目文件内容 | 自动检测到 |
project:///package.json | 解析包.json | 应用程序/json |
project:///tree | 目录树 | 文本/纯文本 |
建筑
src/
├── index.ts # Entry point: register tools, start stdio
├── server.ts # MCP server: method dispatch
├── protocol.ts # JSON-RPC 2.0 types and codec
├── transport.ts # Stdio transport (line-delimited JSON)
├── config.ts # Zod-validated env config
├── tools/
│ ├── registry.ts # Tool registry (name → handler + schema)
│ ├── git.ts # Git tools: status, diff, log, blame
│ ├── project.ts # Project tools: tree, read, search
│ └── shell.ts # Safe shell: allowlisted commands only
├── resources/
│ ├── provider.ts # Resource provider interface
│ ├── project.ts # File resources (file:///path)
│ └── package.ts # package.json + tree resources
├── lib/
│ ├── constants.ts # Shared constants (limits, skip dirs)
│ ├── git.ts # Git CLI wrapper (execFile)
│ ├── sandbox.ts # Path sandboxing
│ ├── schemas.ts # Zod schemas for tool inputs
│ └── tree.ts # Shared directory tree builderMCP协议
实施 模型上下文协议 规范:
- 运输: 基于stdio的JSON-RPC 2.0(换行符分隔的JSON)
- 协议版本:
2024-11-05 - 方法:
initialize,ping,tools/list,tools/call,resources/list,resources/read - 通知:
notifications/initialized
握手示例
# Initialize
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"0.1.0"}}}' | node dist/index.js配置
| 变量 | 默认值 | 描述 |
|---|---|---|
PROJECT_ROOT | cwd | 文件操作的根目录 |
LOG_LEVEL | info | 日志级别:调试、信息、警告、错误 |
日志被写入stderr;stdout保留用于JSON-RPC消息。
发展
npm run build # Compile TypeScript
npm run dev # Watch mode
npm run test # Run tests (Vitest)
npm run typecheck # Type-check without emitting
npm run lint # ESLint
make all # lint + typecheck + build + test技术栈
| 组件 | 选择 |
|---|---|
| 运行时 | Node.js 20+ |
| 语言 | TypeScript 5(严格) |
| 协议 | 手动JSON-RPC 2.0 |
| 验证 | Zod |
| 测试 | Vitest |
| Linting | ESLint+打字ESLint |
许可证
麻省理工学院
贡献
看 贡献.md.PR欢迎运行 npm test && npm run lint 在提交之前。
