FastFS MCP
用于文件系统操作、Git集成和交互式提示功能的高速MCP(模型上下文协议)服务器,旨在与Claude和AI原生工具无缝协作。
🚀 概述
FastFS MCP使像Claude这样的AI助手能够与您的本地文件系统交互,管理Git存储库,并通过标准化的基于JSON的协议提供交互体验。无论您是构建人工智能辅助开发工作流程,使用Claude创建内容,还是自动化文件管理任务,FastFS MCP都能在您的人工智能助手和本地环境之间架起桥梁。
%%{ init: { "theme": "dark", "look": "handDrawn", "themeVariables": { "handDrawn": true } } }%%
graph TD
Claude[Claude AI Assistant] |JSON Protocol| MCP[FastFS-MCP Server]
MCP |File Operations| FS[Local Filesystem]
MCP |Git Operations| Git[Git Repositories]
MCP |Interactive Prompts| User[Human User]
subgraph "FastFS-MCP Capabilities"
FS
Git
User
end✨ 主要特点
- 超高速文件系统操作:以最小的延迟访问、修改和管理文件
- 完成Git集成:执行所有标准Git操作和高级存储库分析
- 交互式提示:使Claude能够通过结构化的提示和表单吸引用户
- GitHub身份验证:使用个人访问令牌或GitHub应用程序在GitHub上进行安全身份验证
- JSON协议:使用标准界面与Claude Desktop、VSCode和其他AI原生工具进行通信
🛠️ 核心组件架构
%%{ init: { "theme": "dark", "look": "handDrawn", "themeVariables": { "handDrawn": true } } }%%
graph TD
Server[server.py] --> FastMCP[FastMCP Class]
Server --> FileOps[Filesystem Operations]
Server --> GitTools[git_tools.py]
Server --> PromptHelpers[prompt_helpers.py]
FileOps --> Basic[Basic Commands]
FileOps --> Advanced[Advanced Operations]
FileOps --> Text[Text Processing]
FileOps --> Archive[Archive & Compression]
GitTools --> BasicGit[Basic Git]
GitTools --> AdvancedGit[Advanced Git]
GitTools --> GitAnalysis[Repository Analysis]
GitTools --> GitAuth[GitHub Authentication]
PromptHelpers --> Templates[Prompt Templates]
PromptHelpers --> Interactive[Interactive Tools]
GitAuth --> PAT[Personal Access Token]
GitAuth --> GitHubApp[GitHub App]
GitHubApp --> DirectKey[Direct Key]
GitHubApp --> KeyFromFile[Key from File]💻 安装和快速启动
Docker快速入门
# Build the Docker image
docker build -t fastfs-mcp .
# Run with your local filesystem mounted
docker run -i --rm \
-v C:\\Users\\username:/mnt/workspace:rw \
fastfs-mcp在Unix/macOS上:替换为 -v $HOME:/mnt/workspace使用GitHub身份验证
使用个人访问令牌
docker run -i --rm \
-v C:\\Users\\username:/mnt/workspace:rw \
-e GITHUB_PERSONAL_ACCESS_TOKEN=ghp_your_token_here \
fastfs-mcp使用GitHub应用程序(选项1:私钥作为环境变量)
docker run -i --rm \
-v C:\\Users\\username:/mnt/workspace:rw \
-e GITHUB_APP_ID=your_app_id \
-e GITHUB_APP_PRIVATE_KEY="$(cat path/to/private-key.pem)" \
-e GITHUB_APP_INSTALLATION_ID=your_installation_id \
fastfs-mcp使用GitHub应用程序(选项2:工作区文件中的私钥)
# First, copy your private key to the workspace
cp path/to/private-key.pem C:\\Users\\username\\github-app-key.pem
# Then run with the path to the private key
docker run -i --rm \
-v C:\\Users\\username:/mnt/workspace:rw \
-e GITHUB_APP_ID=your_app_id \
-e GITHUB_APP_PRIVATE_KEY_PATH=/mnt/workspace/github-app-key.pem \
-e GITHUB_APP_INSTALLATION_ID=your_installation_id \
fastfs-mcp🤖 Claude桌面配置
{
"mcpServers": {
"filesystem": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-v", "C:\\Users\\username:/mnt/workspace:rw",
"fastfs-mcp"
]
}
}
}使用GitHub身份验证
使用个人访问令牌
{
"mcpServers": {
"filesystem": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "GITHUB_PERSONAL_ACCESS_TOKEN",
"-v", "C:\\Users\\username:/mnt/workspace:rw",
"fastfs-mcp"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_your_token_here"
}
}
}
}使用私钥作为环境变量的GitHub应用程序
{
"mcpServers": {
"filesystem": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "GITHUB_APP_ID",
"-e", "GITHUB_APP_PRIVATE_KEY",
"-e", "GITHUB_APP_INSTALLATION_ID",
"-v", "C:\\Users\\username:/mnt/workspace:rw",
"fastfs-mcp"
],
"env": {
"GITHUB_APP_ID": "your_app_id",
"GITHUB_APP_PRIVATE_KEY": "-----BEGIN RSA PRIVATE KEY-----\n...\n-----END RSA PRIVATE KEY-----",
"GITHUB_APP_INSTALLATION_ID": "your_installation_id"
}
}
}
}使用GitHub应用程序与文件中的私钥
{
"mcpServers": {
"filesystem": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "GITHUB_APP_ID",
"-e", "GITHUB_APP_PRIVATE_KEY_PATH",
"-e", "GITHUB_APP_INSTALLATION_ID",
"-v", "C:\\Users\\username:/mnt/workspace:rw",
"fastfs-mcp"
],
"env": {
"GITHUB_APP_ID": "your_app_id",
"GITHUB_APP_PRIVATE_KEY_PATH": "/mnt/workspace/github-app-key.pem",
"GITHUB_APP_INSTALLATION_ID": "your_installation_id"
}
}
}
}📋 工具类别
FastFS MCP提供了一套按逻辑类别组织的全面工具:
%%{ init: { "theme": "dark", "look": "handDrawn", "themeVariables": { "handDrawn": true } } }%%
graph TD
MCP[FastFS-MCP] --> FS[Filesystem Operations]
MCP --> Git[Git Operations]
MCP --> Prompts[Interactive Prompts]
MCP --> Processing[Text & File Processing]
MCP --> Archive[Archive & Compression]
FS --> Basic[Basic Operations]
FS --> Advanced[Advanced Operations]
Git --> BasicGit[Basic Commands]
Git --> AdvancedGit[Advanced Analysis]
Git --> GitHubAuth[GitHub Authentication]
GitHubAuth --> PAT[Personal Access Token]
GitHubAuth --> GitHubApp[GitHub App]
Prompts --> Templates[Prompt Templates]
Prompts --> Interactive[Interactive Tools]
Processing --> Text[Text Manipulation]
Processing --> Filters[Filters & Transformations]
Archive --> Tar[Tar Operations]
Archive --> Zip[Zip Operations]
Archive --> Compress[Compression Tools]🗂️ 文件系统操作
基本操作
%%{ init: { "theme": "dark", "look": "handDrawn", "themeVariables": { "handDrawn": true } } }%%
graph LR
ls[ls] --> list[List files and directories]
cd[cd] --> change[Change current directory]
pwd[pwd] --> print[Print working directory]
read[read] --> display[Display file contents]
write[write] --> create[Create or modify files]
grep[grep] --> search[Search file content]
which[which] --> locate[Locate executables]| 方法 | 说明 |
|---|---|
ls | 列出目录中的文件 |
cd | 更改当前工作目录 |
pwd | 打印当前工作目录 |
read | 读取文件内容 |
write | 创建或覆盖文件内容 |
grep | 通过ripgrep快速搜索文件 |
which | 在PATH中查找可执行文件 |
高级操作
| 方法 | 说明 |
|---|---|
tree | 显示目录结构 |
find | 按模式查找文件 |
cp | 复制文件或目录 |
mv | 移动或重命名文件 |
rm | 删除文件或目录 |
mkdir | 创建目录 |
stat | 显示文件元数据 |
chmod | 更改文件权限 |
du | 显示磁盘使用情况 |
df | 显示磁盘空间 |
touch | 创建新的空文件或更新时间戳 |
文本和文件处理
| 方法 | 说明 |
|---|---|
sed | 用于文本转换的流编辑器 |
gawk | 使用AWK进行文本处理 |
head | 显示文件的第一行 |
tail | 显示文件的最后一行 |
wc | 计数行、字和字节 |
cut | 从文件中选择列 |
sort | 对文本文件行进行排序 |
uniq | 报告或过滤重复行 |
nl | 对文件中的行进行编号 |
split | 将文件拆分为更小的部分 |
readlink | 打印符号链接的解析路径 |
realpath | 打印解析的绝对路径 |
存档和压缩
| 方法 | 说明 |
|---|---|
tar | 创建/提取tar档案 |
gzip | 压缩/解压缩文件 |
zip | 创建/提取zip存档 |
🌿 Git操作
%%{ init: { "theme": "dark", "look": "handDrawn", "themeVariables": { "handDrawn": true } } }%%
graph TD
Git[Git Operations] --> Repo[Repository Management]
Git --> Changes[Change Management]
Git --> Branch[Branch Operations]
Git --> Remote[Remote Operations]
Git --> Analysis[Repository Analysis]
Git --> Auth[GitHub Authentication]
Repo --> init[Initialize Repository]
Repo --> clone[Clone Repository]
Repo --> status[Check Status]
Changes --> add[Stage Changes]
Changes --> commit[Commit Changes]
Changes --> diff[View Differences]
Branch --> checkout[Switch Branches]
Branch --> branch[Manage Branches]
Branch --> merge[Merge Branches]
Remote --> push[Push Changes]
Remote --> pull[Pull Changes]
Remote --> fetch[Fetch Updates]
Analysis --> context[Get Repository Context]
Analysis --> validate[Validate Repository]
Analysis --> suggest[Suggest Commit Messages]
Analysis --> audit[Audit Repository History]
Auth --> PAT[Personal Access Token]
Auth --> GitHubApp[GitHub App]Git基本操作
| 方法 | 说明 |
|---|---|
clone | 克隆Git存储库 |
init | 初始化一个新的Git仓库 |
add | 将文件添加到暂存区 |
commit | 将更改提交到存储库 |
status | 显示工作树状态 |
push | 将更改推送到远程存储库 |
pull | 从远程存储库中提取更改 |
log | 显示提交日志 |
checkout | 切换分支或还原文件 |
branch | 列出、创建或删除分支 |
merge | 将发展历史连接在一起 |
show | 显示Git对象 |
diff | 显示提交/工作树之间的更改 |
remote | 管理远程存储库 |
stash | 暂停工作目录中的更改 |
tag | 管理Git标签 |
config | 获取或设置存储库或全局选项 |
fetch | 从另一个存储库下载对象和引用 |
blame | 显示文件的每一行最后修改的版本和作者 |
git_grep | 打印与跟踪文件中的图案匹配的行 |
head | 显示当前HEAD提交信息 |
高级Git分析
| 方法 | 说明 |
|---|---|
context | 获取全面的回购上下文 |
repo_info | 获取详细的存储库信息 |
validate | 检查存储库中的常见问题 |
summarize_log | 生成提交日志统计信息 |
suggest_commit | 自动建议提交消息 |
audit_history | 安全问题审计存储库 |
🤝 互动提示
%%{ init: { "theme": "dark", "look": "handDrawn", "themeVariables": { "handDrawn": true } } }%%
graph TD
Prompts[Interactive Prompts] --> Templates[Prompt Templates]
Prompts --> Operations[Prompt Operations]
Templates --> FilePrompts[File Prompts]
Templates --> ContentPrompts[Content Prompts]
Templates --> ProjectPrompts[Project Prompts]
Templates --> CustomPrompts[Custom Prompts]
Operations --> prompt[Send Prompt]
Operations --> interactive_write[Interactive Write]
Operations --> confirm_overwrite[Confirm Overwrite]
Operations --> select_file[Select File]
Operations --> get_file_content[Get File Content]
Operations --> init_project[Initialize Project]
FilePrompts --> confirm_file_overwrite[Confirm File Overwrite]
FilePrompts --> confirm_directory_delete[Confirm Directory Delete]
FilePrompts --> file_not_found_options[File Not Found Options]
ContentPrompts --> enter_file_content[Enter File Content]
ContentPrompts --> enter_search_pattern[Enter Search Pattern]
ProjectPrompts --> project_initialization[Project Initialization]
ProjectPrompts --> coding_task[Coding Task]
CustomPrompts --> custom[Custom Message]提示模板
| 模板 | 说明 |
|---|---|
confirm_file_overwrite | 在覆盖现有文件之前,请用户确认 |
confirm_directory_delete | 删除目录前警告用户 |
file_not_found_options | 找不到文件时提供选项 |
enter_file_content | 从用户处获取文件内容 |
enter_search_pattern | 向用户询问搜索模式 |
project_initialization | 收集信息以初始化新项目 |
coding_task | 定义编码任务的参数 |
select_file_from_list | 允许用户从列表中选择文件 |
custom | 创建完全自定义的提示消息 |
交互功能
| 功能 | 说明 |
|---|---|
prompt | 向用户发送交互式提示 |
get_prompt_types | 列出可用的提示模板 |
interactive_write | 使用用户提供的内容写入文件 |
confirm_overwrite | 覆盖文件前询问 |
select_file | 让用户从文件列表中选择 |
get_file_content | 从用户处获取文件内容 |
init_project | 使用引导设置初始化项目 |
📝 协议使用
FastFS MCP使用简单的基于JSON的协议与Claude和其他AI工具进行通信。
请求格式
{
"method": "METHOD_NAME",
"params": {
"param1": "value1",
"param2": "value2"
}
}响应格式
{
"result": RESPONSE_DATA
}例子
基本文件操作
// Request
{
"method": "ls",
"params": { "path": "." }
}
// Response
{
"result": ["main.tf", "README.md"]
}Git存储库上下文
// Request
{
"method": "context",
"params": {}
}
// Response
{
"result": {
"current_branch": "main",
"repository_root": "/mnt/workspace/my-project",
"is_clean": false,
"head_commit": "a1b2c3d4e5f6...",
"remotes": {
"origin": "https://github.com/user/repo.git"
},
"recent_commits": [
"a1b2c3d4 Update README.md",
"b2c3d4e5 Fix bug in main function",
"c3d4e5f6 Add new feature"
]
}
}交互式提示流
// Request
{
"method": "prompt",
"params": {
"prompt_type": "custom",
"message": "What would you like to name your file?"
}
}
// Response to stdout (visible to user)
{
"type": "user_prompt",
"prompt": "What would you like to name your file?"
}
// User response (from stdin)
{
"type": "user_response",
"response": "myfile.txt"
}
// Final result to Claude
{
"result": {
"response": "myfile.txt",
"timestamp": 1622548123.45
}
}🔧 GitHub身份验证
FastFS MCP支持两种GitHub身份验证方法,以在GitHub存储库中实现安全的Git操作:
个人访问令牌(PAT)身份验证
%%{ init: { "theme": "dark", "look": "handDrawn", "themeVariables": { "handDrawn": true } } }%%
sequenceDiagram
participant Claude
participant FastFS
participant GitHub
Claude->>FastFS: git_clone(private_repo_url)
FastFS->>GitHub: Authentication with PAT
GitHub-->>FastFS: Authentication successful
FastFS->>GitHub: Clone repository
GitHub-->>FastFS: Repository content
FastFS-->>Claude: Clone successful当GitHub PAT通过 GITHUB_PERSONAL_ACCESS_TOKEN 环境变量,与GitHub交互的Git操作(克隆、推送、拉取、获取)将自动使用令牌进行身份验证,从而启用:
- 访问私有存储库
- 需要身份验证的操作(推送、创建仓库等)
- 避免API调用的速率限制
GitHub应用程序身份验证
%%{ init: { "theme": "dark", "look": "handDrawn", "themeVariables": { "handDrawn": true } } }%%
sequenceDiagram
participant Claude
participant FastFS
participant GitHub
Claude->>FastFS: git_clone(private_repo_url)
FastFS->>FastFS: Generate JWT using private key
FastFS->>GitHub: Request installation token with JWT
GitHub-->>FastFS: Installation token
FastFS->>GitHub: Clone repository with installation token
GitHub-->>FastFS: Repository content
FastFS-->>Claude: Clone successful与个人访问令牌相比,GitHub应用程序身份验证提供了更精细的权限和更好的安全性:
- 细化权限:GitHub Apps可以配置特定权限
- 特定于存储库的访问:GitHub Apps可以安装在特定的存储库上
- 组织级控制:组织管理员可以控制安装哪些应用程序
- 自动令牌刷新:安装令牌在1小时后过期并自动刷新
要使用GitHub App身份验证,请提供以下环境变量:
GITHUB_APP_ID:您的GitHub应用程序ID
私钥的其中一个选项是:
GITHUB_APP_PRIVATE_KEY:作为环境变量的GitHub应用程序的私钥内容(PEM格式)GITHUB_APP_PRIVATE_KEY_PATH:包含私钥的文件的路径(PEM格式)
可选:
GITHUB_APP_INSTALLATION_ID:要使用的特定安装ID(如果没有提供,FastFS MCP将尝试使用第一个安装)
私钥的安全考虑
使用GitHub App身份验证时,请考虑以下管理私钥的安全实践:
- 基于文件的私钥 (推荐):
- 将私钥存储在工作区中并使用 GITHUB_APP_PRIVATE_KEY_PATH - 确保私钥文件具有适当的文件权限(chmod 600) - 这种方法避免了过程中的关键环境变量或shell历史记录
- 环境变量私钥:
- 用于开发或无法装载文件时 - 请注意,在某些系统的流程列表中可以看到环境变量
🐳 Docker环境
FastFS MCP在Docker容器中运行,以实现可移植性和隔离性,并安装了以下工具:
ripgrep用于高性能文件搜索jq用于JSON解析和操作sed和gawk用于文本处理tree用于目录可视化fd-find用于替代文件查找coreutils用于标准Unix工具zip/unzip,gzip,以及xz-utils用于压缩git用于存储库操作
🚀 用例
- 人工智能辅助开发:让Claude在同一次对话中帮助您编写代码、管理文件和使用Git
- 内容创建工作流:使Claude能够读取、写入和组织用于编写项目的文件
- 存储库管理:深入了解Git存储库并自动化常见的Git操作
- 交互式项目设置:通过交互式提示引导用户完成结构化项目初始化
- 系统管理:在人工智能的帮助下执行文件系统操作和维护任务
🔒 安全考虑
FastFS MCP提供对文件系统和Git存储库的直接访问。考虑以下安全实践:
- 仅以适当的文件系统权限运行FastFS MCP
- 只挂载需要向Claude公开的目录
- 使用单独的GitHub PAT进行有限的身份验证,或者更喜欢GitHub Apps以获得更好的安全性
- 定期查看服务器执行的日志和命令
- 对于GitHub Apps,安全地存储私钥并使用特定于安装的令牌
- 使用GitHub App身份验证时,如果可能的话,更喜欢基于文件的私钥而不是环境变量
📄 许可证
FastFS MCP是在MIT许可证下发布的。有关详细信息,请参阅LICENSE文件。
🤝 贡献
欢迎投稿!请随时提交拉取请求。
- 复刻仓库
- 创建功能分支(
git checkout -b feature/amazing-feature) - 提交您的更改(
git commit -m 'Add some amazing feature') - 推到分支(
git push origin feature/amazing-feature) - 打开拉取请求
📚 更多文件
______________________________________________________________________
专为AI增强的CLI和开发人员工作流而构建,具有速度、结构和简单性。
