A community-driven registry for Claude, Cursor, Windsurf, Cline & more. Not affiliated with Anthropic.
Are you the author? Sign in to claim
An md file as a chat interface and editable history in one.
Finally, a fully editable chat interface with MCP support on any LLM.
chat.md is a Visual Studio Code extension that reimagines AI interaction through plain text files. Unlike ephemeral web interfaces or proprietary chat windows, chat.md embraces a file-first approach where your conversations with AI are just markdown files with a .chat.md extension. Edit them, version control them, share them - they're your files. The AI directly writes its response in the file.
Any '*.chat.md' file is now an AI agent hackable by you. Go crazy with non linear AI conversation.
Here's the chat I used to publish this vscode extension using gemini-2.5-pro and wcgw mcp
NOTE ⚠️: chat.md is 100% AI coded and should be treated as a feature rich POC.
| Other AI Tools | chat.md |
|---|---|
| ❌ Linear conversations or limited editing | ✅ Non-linear editing - rewrite history, branch conversations |
| ❌ Tool execution tied to proprietary implementations | ✅ Any LLM model can do tool calling |
| ❌ Can't manually edit AI responses | ✅ Put words in LLM's mouth - edit and have it continue from there |
| ❌ MCP not supported in many LLMs | ✅ Any LLM model can use MCP servers |
| ❌ Max token limit for assistant response can't be resumed | ✅ Resume incomplete AI responses at any point |
| ❌ Conversations live in the cloud or inaccessible | ✅ Files stored locally alongside your code in human readable format |
| ❌ Separate context from your workspace | ✅ Attach files directly from your project |
Unlike Copilot's inline suggestions, ChatGPT's web interface, or Cursor's side panel, chat.md treats conversations as first-class files in your workspace:
# %% user
How can I optimize this function?
[#file](src/utils.js)
# %% assistant
Looking at your utils.js file, I see several opportunities for optimization:
1. The loop on line 24 could be replaced with a more efficient map/reduce pattern
2. The repetitive string concatenation can be improved with template literals
...
Chat.md is a Model Context Protocol (MCP) client - an open standard for tool execution that works with any LLM.
Chat.md doesn't restrict any LLM from tool calling unlike many chat applications.
<tool_call>
<tool_name>filesystem.searchFiles</tool_name>
<param name="pattern">*.js</param>
<param name="directory">src</param>
</tool_call>
[file](path/to/file)Since chat.md files are just text, you have complete control over your AI interactions:
Opt+Cmd+' (Mac) / Ctrl+k Ctrl+c (Windows/Linux) to create a new '.chat.md' file with workspace information populated in a user block..chat.md extension anywhere and open it in vscode.Optionally you can start a markdown preview side by side to get live markdown preview of the chat which is more user friendly.
# %% system block to append any new instructions to the system prompt.chat.md supports a three-level configuration system with the following precedence (highest to lowest):
.chat.md filesConfigure parameters at the beginning of any .chat.md file:
selectedConfig="my-provider"
reasoningEffort="high"
maxTokens=4000
maxThinkingTokens=20000
# %% system
Your system prompt here
Access these through VS Code's settings UI or settings.json:
chatmd.apiConfigs: Named API configurations (provider, API key, model, base URL, plus optional reasoning/token settings)chatmd.selectedConfig: Active API configurationchatmd.mcpServers: Configure MCP tool serverschatmd.reasoningEffort: Global reasoning depth (none, minimal, low, medium, high)chatmd.maxTokens: Global maximum response tokenschatmd.maxThinkingTokens: Global maximum thinking tokensWhen an AI response includes a tool call, the extension will automatically:
You can also trigger tool execution manually by:
Shift+Enter: Insert next block (alternates between user/assistant) or inserts a tool_execute block if the cursor is at the end of an assistant block containing a tool callOpt+Cmd+' (Mac) / Ctrl+k Ctrl+c' (Windows/Linux): Create new context chat or cancel existing streamingConnect any Model Context Protocol server to extend AI capabilities:
For local MCP servers running in the same environment as VS Code:
"chatmd.mcpServers": {
"wcgw": {
"command": "uvx",
"args": [
"--python",
"3.12",
"--from",
"wcgw@latest",
"wcgw_mcp"
]
}
}
chat.md supports the new Streamable HTTP transport from the MCP spec 2025-11-25, which replaces the older HTTP+SSE transport. This is the recommended way to connect to remote MCP servers.
"chatmd.mcpServers": {
"remote-mcp": {
"url": "https://example.com/mcp",
"transport": "streamable-http"
}
}
You can also pass custom HTTP headers (e.g. for authentication):
"chatmd.mcpServers": {
"remote-mcp": {
"url": "https://example.com/mcp",
"transport": "streamable-http",
"headers": {
"Authorization": "Bearer your-token-here"
}
}
}
By default, the transport field is "auto" — chat.md will try the new Streamable HTTP transport first, and automatically fall back to the legacy SSE transport if the server doesn't support it. You can explicitly set the transport to "streamable-http", "sse", or "auto":
| Value | Behavior |
|---|---|
"auto" (default) | Tries Streamable HTTP first, falls back to SSE |
"streamable-http" | Uses only the new Streamable HTTP transport |
"sse" | Uses only the legacy SSE transport |
For older remote MCP servers that only support the deprecated HTTP+SSE transport:
"chatmd.mcpServers": {
"remote-mcp": {
"url": "http://localhost:3000/sse",
"transport": "sse"
}
}
You can also add environment variables if needed:
"chatmd.mcpServers": {
"remote-mcp": {
"url": "http://localhost:3000/sse",
"transport": "sse",
"env": {
"API_KEY": "your-api-key-here"
}
}
}
The AI will automatically discover available tools from both local and remote servers and know how to use them! Tool lists are refreshed automatically every 5 seconds to keep them up-to-date. All MCP servers are initialized concurrently, so a slow or failing server won't block the others.
chat.md breaks away from the artificial "chat" paradigm and acknowledges that AI interaction is fundamentally about text processing. By treating conversations as files:
vscode json settings
"chatmd.apiConfigs": {
"gpt-5.2": {
"type": "openai",
"apiKey": "",
"model_name": "gpt-5.2",
"reasoningEffort": "none"
},
"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",
"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",
"--from",
"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"
Configuration Notes:
maxTokens (default: 8000) controls the maximum number of tokens for model responsesmaxTokens is used as the total max_completion_tokens budget (includes both thinking and response tokens)maxThinkingTokens controls the thinking token budget separately, or can be calculated automatically from reasoningEffortMIT License - see the LICENSE file for details.
mcp-language-server gives MCP enabled clients access semantic tools like get definition, references, rename, and diagnos
Run Claude Code as an MCP server so any agent can delegate coding tasks to it
Browser automation using accessibility snapshots instead of screenshots