终于有了一个支持MCP的完全可编辑聊天界面,适用于任何LLM。
chat.md 是一个 Visual Studio Code 扩展程序,通过纯文本文件重新定义了与AI的交互方式。与短暂的网页界面或专有的聊天窗口不同,chat.md 采用文件优先的方法,你的AI对话只是带有 .chat.md 扩展名的 Markdown 文件。你可以编辑它们,进行版本控制,分享它们——它们就是你的文件。AI会直接在文件中写入其响应。
任何 *.chat.md 文件现在都可以被你作为AI代理进行修改。尽情享受非线性的AI对话吧。
这是我用来发布此VSCode扩展程序的聊天记录,使用了gemini-2.5-pro和wcgw mcp
注意 ⚠️:chat.md 完全由AI编写,并应被视为功能丰富的概念验证。
| 其他AI工具 | chat.md |
|---|---|
| ❌ 线性对话或有限编辑 | ✅ 非线性编辑 - 重写历史,分支对话 |
| ❌ 工具执行绑定到专有实现 | ✅ 任何LLM模型都可以调用工具 |
| ❌ 无法手动编辑AI响应 | ✅ 将话放在LLM口中 - 编辑并让其继续 |
| ❌ 许多LLM不支持MCP | ✅ 任何LLM模型都可以使用MCP服务器 |
| ❌ 助手响应的最大令牌限制不能恢复 | ✅ 在任何点恢复不完整的AI响应 |
| ❌ 对话存在于云端或不可访问的地方 | ✅ 文件存储在本地,与代码一起以人类可读的格式 |
| ❌ 从工作区分离上下文 | ✅ 直接从项目中附加文件 |
与Copilot的内联建议、ChatGPT的网页界面或Cursor的侧边栏不同,chat.md 将对话视为工作区中的第一类文件:
# %% 用户
如何优化这个函数?
[#file](src/utils.js)
# %% 助手
查看你的utils.js文件,我看到有几个优化机会:
1. 第24行的循环可以用更高效的map/reduce模式替换
2. 重复的字符串连接可以使用模板字面量改进
...
Chat.md 是一个**模型上下文协议(MCP)**客户端——这是一个开放标准,用于与任何LLM的工具执行。
Chat.md 不像许多聊天应用程序那样限制任何LLM的工具调用。
<tool_name>filesystem.searchFiles</tool_name>
<param name="pattern">*.js</param>
<param name="directory">src</param>
[file](path/to/file)由于 chat.md 文件只是文本,你对AI交互拥有完全控制权:
Opt+Cmd+' (Mac) / Ctrl+k Ctrl+c (Windows/Linux) 创建一个新的'.chat.md'文件,其中包含工作区信息填充在用户块中。.chat.md扩展名的文件,并在VSCode中打开它。可选地,你可以并排启动Markdown预览以获得更友好的实时Markdown预览。
# %% 系统 块来追加任何新的系统提示指令。chat.md 支持三级配置系统,优先级从高到低如下:
.chat.md 文件的顶部在任何 .chat.md 文件的开头配置参数:
selectedConfig="my-provider"
reasoningEffort="high"
maxTokens=4000
maxThinkingTokens=20000
# %% 系统
你的系统提示在这里
通过VS Code的设置UI或settings.json访问这些设置:
chatmd.apiConfigs:命名的API配置(提供商、API密钥、模型、基础URL,加上可选的推理/令牌设置)chatmd.selectedConfig:活动的API配置chatmd.mcpServers:配置MCP工具服务器chatmd.reasoningEffort:全局推理深度(最小、低、中、高)chatmd.maxTokens:全局最大响应令牌数chatmd.maxThinkingTokens:全局最大思考令牌数当AI响应包括工具调用时,扩展程序将自动:
你也可以手动触发工具执行:
Shift+Enter:插入下一个块(交替用户/助手)或在助手块末尾插入一个工具执行块Opt+Cmd+' (Mac) / Ctrl+k Ctrl+c' (Windows/Linux):创建新的上下文聊天或取消现有流式传输连接任何模型上下文协议服务器以扩展AI能力:
对于与VS Code在同一环境中运行的本地MCP服务器:
"chatmd.mcpServers": {
"wcgw": {
"command": "uvx",
"args": [
"--python",
"3.12",
"wcgw@latest",
"wcgw_mcp"
]
}
}
对于可通过HTTP/服务器发送事件访问的远程MCP服务器:
"chatmd.mcpServers": {
"remote-mcp": {
"url": "http://localhost:3000/sse"
}
}
如有需要,还可以添加环境变量:
"chatmd.mcpServers": {
"remote-m_ cp": {
"url": "http://localhost:3000/sse",
"env": {
"API_KEY": "your-api-key-here"
}
}
}
AI将自动发现来自本地和远程服务器的可用工具并知道如何使用它们!工具列表每5秒自动刷新一次,以保持最新状态。
chat.md 脱离了人为的“聊天”范式,承认AI交互本质上是关于文本处理。通过将对话视为文件:
vscode json设置
"chatmd.apiConfigs": {
"gemini-2.5pro": {
"type": "openai",
"apiKey": "",
"base_url": "https://generativelanguage.googleapis.com/v1beta/openai/",
"model_name": "gemini-2.5-pro-exp-03-25"
},
"anthropic-sonnet-3-7": {
"type": "anthropic",
"apiKey": "sk-ant-",
"base_url": "",
"model_name": "claude-3-7-sonnet-latest",
"reasoningEffort": "high",
"maxTokens": 6000,
"maxThinkingTokens": 18000
},
"openrouter-qasar": {
"type": "openai",
"apiKey": "sk-or-",
"base_url": "https://openrouter.ai/api/v1",
"model_name": "openrouter/quasar-alpha"
},
"groq-llam4": {
"type": "openai",
"apiKey": "",
"base_url": "https://api.groq.com/openai/v1",
"model_name": "meta-llama/llama-4-scout-17b-16e-instruct"
},
"together-llama4": {
"type": "openai",
"base_url": "https://api.together.xyz/v1",
"apiKey": "",
"model_name": "meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8"
}
},
"chatmd.mcpServers": {
"wcgw": {
"command": "/opt/homebrew/bin/uv",
"args": [
"tool",
"run",
"--python",
"3.12",
"wcgw@latest",
"wcgw_mcp"
]
},
"brave-search": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-brave-search"],
"env": {
"BRAVE_API_KEY": ""
}
},
"fetch": {
"command": "/opt/homebrew/bin/uvx",
"args": ["mcp-server-fetch"]
}
},
"chatmd.selectedConfig": "gemini-2.5pro",
"chatmd.maxTokens": 8000,
"chatmd.maxThinkingTokens": 16000,
"chatmd.reasoningEffort": "medium"
配置说明:
maxTokens(默认值:8000)控制模型响应的最大令牌数maxTokens用作总max_completion_tokens预算(包括思考和响应令牌)maxThinkingTokens单独控制思考令牌预算,或可以从reasoningEffort自动计算MIT 许可证 - 详情见LICENSE文件。